gpt4 book ai didi

c# - 如何管理从下拉列表中显示在 gridview 中的内容?

转载 作者:行者123 更新时间:2023-11-30 22:12:11 24 4
gpt4 key购买 nike

第一次在这里发帖。

我有一个简单的 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() 中,我填充了 Persons 列表。它的内容不会改变。

    protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
loadList();
}
}

至于使用ddlPersons.SelectedItem过滤哪些内容,我不知道是怎么做到的。我的意思是我已经尝试使用不同的方式来访问所选对象,但仍然没有成功。

更新 2

gridview 和下拉列表的标记

<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);

说了这么多,这是假设你的收藏 PersonsList<T> , 还要记住,上面的解决方案将从数据库加载整个结果集并过滤 Web 服务器内存中的列表。如果您的数据检索函数返回 IQueryable<T> ,上面的函数可以稍微修改一下,使数据库查询更高效。如果您对此感兴趣,请告诉我。

编辑 #2

我找不到引用文档,但如果没记错的话 GridView.DataSource需要一个实现 IEnumerable 的对象接口(interface)所以 DataBind()进程可以获得一个枚举器对象来迭代数据。根据您的评论,这似乎是问题的一部分。

关于c# - 如何管理从下拉列表中显示在 gridview 中的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19862199/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com