第一次在这里发帖。
我在一个简单的 Web 应用程序中遇到了一个具体问题,我被困在将 gridview 绑定(bind)到下拉列表并在 ddl 中显示所选项目的内容。
我可以将 gridview 绑定(bind)到 ddl,它将显示 ddl 的所有项目中包含的信息。但我一生都无法弄清楚如何仅在 GridView 中显示所选对象的信息。
而且我也无法从 ddl 的 onSelectedItemChanged 重新启动数据绑定(bind)。
protected void ddlPersons_SelectedItemChanged(object sender, EventArgs e)
{
Label1.Text = "message";
this.GridView1.DataSource = Persons;
this.GridView1.DataBind();
}
(Persons 是我已确认包含我需要的信息的对象列表。标签只是用来查看该方法是否触发。它也会执行此操作,但数据绑定(bind)不会执行。)
我从 stackoverflow 尝试了许多不同的答案,但似乎没有一个对我的项目起作用,我完全不知道我应该做什么。
已更新 这是我的页面加载。在方法 loadList() 中,我填充了人员列表。其内容不会改变。
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
loadList();
}
}
至于使用 ddlPersons.SelectedItem 来过滤哪些内容,我不知道这是如何完成的。我的意思是我尝试使用不同的方式来访问所选对象,但仍然不成功。
更新2
gridview 和 dropdownlist 的标记
<asp:GridView ID="GridView1" runat="server">
<Columns>
<asp:TemplateField HeaderText ="Nr">
<ItemTemplate>
<%# DataBinder.Eval(Container, "DataItem.getSetFirstName") %>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText ="Namn">
<ItemTemplate>
<%# DataBinder.Eval(Container, "DataItem.getSetFirstName") %>
<%# DataBinder.Eval(Container, "DataItem.getSetLastName") %>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText ="Ålder">
<ItemTemplate>
<%# DataBinder.Eval(Container, "DataItem.getSetAge") %>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:DropDownList ID="ddlPersons" runat="server" OnSelectedItemChanged="ddlPersons_SelectedItemChanged" AutoPostBack="True" OnSelectedIndexChanged="ddlPersons_SelectedItemChanged">
</asp:DropDownList>
最佳答案
由于您是手动绑定(bind)GridView,因此需要使用ddlPersons.SelectedValue
过滤 Persons
的内容收藏。
至于为什么你的GridView没有填充,这不是你发布的代码的问题。您可能想要包含 GridView 和 DropDownList 标记以及用于填充 Persons
的任何代码。 .
编辑:
假设您要过滤Persons
在其称为类别的属性之一上,您可以过滤 List<Person>
例如,将 LINQ 与如下函数一起使用:
private List<Person> FilterPersonsByCategory(List<Person> liPersons, string strCategory)
{
return liPersons.Where(p => p.Category = strCategory);
}
然后你可以像这样使用这个函数:
GridView1.DataSource = FilterPersonsByCategory(Persons, ddlCategory.SelectedValue);
话虽如此,这是假设您的收藏 Persons
是 List<T>
,并且还要记住,上述解决方案将从数据库加载整个结果集并过滤 Web 服务器内存中的列表。如果您的数据检索函数返回 IQueryable<T>
,上面的函数可以稍微修改一下,让DB查询更加高效。如果您对此感兴趣,请告诉我。
编辑#2
我无法立即找到引用文档,但如果没记错的话GridView.DataSource
需要一个实现 IEnumerable
的对象接口(interface)如此DataBind()
进程可以获取一个枚举器对象来迭代数据。根据您的评论,这似乎是问题的一部分。
关于c# - 如何从下拉列表中管理 GridView 中显示的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19862199/