Asp.net GridView上的复选框

Asp.net GridView上的复选框,asp.net,checkbox,Asp.net,Checkbox,我有一个网格视图,它有3列(名称、地址、状态)和一个复选框。状态有3个属性:活动、挂起和禁用。该页面将加载数据库中的所有信息。加载页面时,应仅显示活动的帐户(并且复选框应保持未选中状态) 单击复选框时,页面应加载禁用的帐户,以及第一次加载页面时已显示的帐户 Aspx: 我编译了一个小的asp.net页面来满足您的要求 注意:在您的项目中,您可能应该从BindGrid方法中去掉“源代码”,这样您就不会在每次页面发回时从头“获取”数据。我这样做是因为我使用了匿名类型 注意#2我将int转换为枚举,然

我有一个网格视图,它有3列(名称、地址、状态)和一个复选框。状态有3个属性:活动、挂起和禁用。该页面将加载数据库中的所有信息。加载页面时,应仅显示活动的帐户(并且复选框应保持未选中状态) 单击复选框时,页面应加载禁用的帐户,以及第一次加载页面时已显示的帐户

Aspx:


我编译了一个小的asp.net页面来满足您的要求

注意:在您的项目中,您可能应该从BindGrid方法中去掉“源代码”,这样您就不会在每次页面发回时从头“获取”数据。我这样做是因为我使用了匿名类型

注意#2我将int转换为枚举,然后转换为字符串。因为您使用的是真实数据,所以应该通过使用enum本身来进行不同的处理

标记:

<asp:CheckBox ID="ChkBox1" runat="server" AutoPostBack="true" OnCheckedChanged="cbShowAllColumn_Changed" TextAlign="Right" Text="Show All"/>
    <br/>
    <asp:gridview ID="gvMain" runat="server" >

    </asp:gridview> 

这里的问题是什么?@AngelEyes,我试图根据复选框显示状态。当它被取消选中时,它将显示所有3个状态,当它被选中时,只显示ActiveThank your for your response。页面已从缓存列表加载数据库中的所有信息。我正在考虑创建一个新的列表以绑定到gridview,并在新列表中执行必要的过滤。另外,我正在gvMain.DataBind()@user3495554上设置错误(数据源不支持服务器端数据分页)。现在我不确定我是否理解这个问题。根据我的回答,您可以使用LINQ进行过滤。如果您想获得关于异常的帮助,请发布一个新的问题。在您的注释中,您说“在您的项目中,您可能应该从BindGrid方法中删除“源”,这样您就不会在每次将页面发回时都从头“获取”数据。我这样做是因为我使用了匿名类型”。我的意思是为了方便起见,我把填充源代码的代码放在Bind方法中。由于您是从数据库中获取数据的,所以反复获取数据是错误的,只是为了过滤数据。正确的方法是获取一次数据,然后对其进行相应的过滤。我对“缓存列表”不熟悉,因此我无法在这方面为您提供帮助-但如果您只获取了一次数据,那么您就做对了。@user3495554如果我的回答确实回答了您的问题,请接受我的回答(请参阅stackoverflow.com/help/someone answers)
            protected void cbShowColumn_Changed(object sender, EventArgs e)
            {
                string columnName = (sender as CheckBox).ID.Substring(1);
                gvTest.Columns[(int)Enum.Parse(typeof(AccountColumns), columnName)].Visible = (sender as CheckBox).Checked;
            }

            protected void cbShowAllColumn_Changed(object sender, EventArgs e)
            {
               bool _checked = (sender as CheckBox).Checked;

               foreach (Control ctrl in pAccount.Controls)
                 if (ctrl is CheckBox)
                 {
                   (ctrl as CheckBox).Checked = _checked;
                   gvMain.Columns[(int)Enum.Parse(typeof(AccountColumns), (ctrl as CheckBox).ID.Substring(2))].Visible = _checked;
                 }

           }
<asp:CheckBox ID="ChkBox1" runat="server" AutoPostBack="true" OnCheckedChanged="cbShowAllColumn_Changed" TextAlign="Right" Text="Show All"/>
    <br/>
    <asp:gridview ID="gvMain" runat="server" >

    </asp:gridview> 
    protected void Page_Load(object sender, EventArgs e)
    {
        BindGrid(false);
    }


    private void BindGrid(bool showActiveOnly)
    {
         var source = Enumerable.Range(1, 10)
                                  .Select(number => new { number, status = (Enum.ToObject(typeof(Statuses), number % 3)).ToString() });

        var filteredSource = source.Where(x => x.status == "Active" || !showActiveOnly);

        gvMain.DataSource = filteredSource;
        gvMain.DataBind();
    }


    protected void cbShowAllColumn_Changed(object sender, EventArgs e)
    {
        bool _checked = (sender as CheckBox).Checked;

        BindGrid(_checked);
    }

    private enum Statuses
    {
        Active,
        Pending,
        Disabled
    }