如果我有一个包含多个A和属性的List,那么如何使用LINQ获取列表中获得属性值为A.abc =“ABC”的所有A。我希望在下拉列表触发SelectedIndexChanged时发生这种情况。我尝试了以下内容:
var datasource = from A in GetListOfAs() where A.attribute == "ABC" select A;
GridView1.DataSource = datasource;
GridView1.DataBind();
在我的GridView中,我有以下BoundFields:
<asp:BoundField DataField="attribute" HeaderText="h1" />
<asp:BoundField DataField="df2" HeaderText="h2" />
所以我希望它显示如下:
h1 h2
------------------
ABC 123
ABC 456
编辑:
初始数据源是整个GetListOfAs()。我正在尝试仅列出具有属性值为“ABC”的那些,但是当我在下拉列表中选择ABC时它会一直显示相同的列表(我可以看到SelectedIndexChanged出现,因为页面重新加载)。
Page_Load方法:
protected void Page_Load(object sender, EventArgs e)
{
GridView1.DataSource = GetListOfAs();
GridView1.DataBind();
ddl.DataSource = GetListOfChoices();
ddl.DataTextField = "name";
ddl.DataValueField = "attribute";
ddl.DataBind();
if (ddl.Items.Count > 0)
{
ddl.Items.Insert(0, "Select one");
ddl.Items[0].Value = "";
ddl.SelectedIndex = 0;
}
}
显然,问题在于没有获得正确的SelectedValue。
我有:String ddlValue = ddl.SelectedValue;
这不应该有用吗?我一直空白(“”)这是初始值。
答案 0 :(得分:1)
您要做的是在IsPostBack
事件内的初始绑定代码中添加Page_Load
检查。每个回发都会触发Page_Load
,所以如果不进行此检查,每次都会有效地运行初始数据绑定(包括所有元素)。
将您的网页加载更改为此
protected void Page_Load(object sender, EventArgs e)
{
// Only bind your gridview with all items, if this is the first page load
if(!Page.IsPostBack) {
GridView1.DataSource = GetListOfAs();
GridView1.DataBind();
ddl.DataSource = GetListOfChoices();
ddl.DataTextField = "name";
ddl.DataValueField = "attribute";
ddl.DataBind();
if (ddl.Items.Count > 0)
{
ddl.Items.Insert(0, "Select one");
ddl.Items[0].Value = "";
ddl.SelectedIndex = 0;
}
}
}
我认为IsPostBack
绑定错误是由每个ASP.net开发人员首次启动时产生的,所以不要感觉不好!你的公司很好:)。
答案 1 :(得分:0)
var datasource = GetListOfAs().Where(x=>x.attribute=="ABC").ToList();
这是获得你已经获得的方式的另一种方式。