GridView上的CheckBox

时间:2014-05-27 11:07:57

标签: asp.net checkbox

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

.aspx的:

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

代码背后:

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

           }

1 个答案:

答案 0 :(得分:0)

我编译了一个小的asp .net页面来做你所要求的。

注意:在您的项目中,您应该选择&#34;来源&#34;超出BindGrid方法,这样你就不会得到&#34;得到&#34;每次页面回发时都会从头开始绘制数据。我这样做是因为我使用了匿名类型。

注意#2 我将int转换为您的枚举,然后转换为字符串。由于您使用真实数据,因此您应该使用枚举本身来处理不同的内容。

标记:

<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
    }