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

标签 c# asp.net gridview drop-down-menu

第一次在这里发帖。

我在一个简单的 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);

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

编辑#2

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

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

相关文章:

c# - 如何判断 PictureBox 的图像是否已更改?

javascript - ASP.NET WebForms 路由 Javascript 错误

flutter - 将 flutter GridView 中的最后一行项目居中

android - 如何使用android中的imageAdapter将特定文件夹的sdcard中的图像上传到 GridView

c# - SIgnalR:如何在连接时向客户端发送异常?

c# - 在gridview中显示百分比值

c# - C#中如何从字符串中获取数字?

c# - 如何允许 netNamedPipeBinding 与要求 UAC 一起工作?

c# - 将配置的选项实例注入(inject)作用域服务的最佳方法是什么?

c# - 拆分字符串 - 通过多个字符,如 {1} {2} {3}