【问题标题】:Count number of checked checkboxes in GridView in c#在c#中计算GridView中选中复选框的数量
【发布时间】:2014-10-12 04:46:42
【问题描述】:

我尝试在选定的复选框等于3时启用GridView中的按钮。

我用过这段代码,但是GridView中的按钮总是被禁用,为什么?

你能帮帮我吗?

感谢您的关注。

    int count;

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            BindGrid();

            if (count == 3)
            {
                btn.Enabled = true;
            }
            else
            {
                btn.Enabled = false;
            }
        }
    }


    protected void btn_Click(object sender, EventArgs e)
    {
        string strname = string.Empty;
        string strnamesplit = string.Empty;
        count = 0;

        foreach (GridViewRow gvrow in GridView1.Rows)
        {
            HiddenField hiddenField = (HiddenField)gvrow.FindControl("HiddenField1");
            CheckBox chk = (CheckBox)gvrow.FindControl("cb");

            if (chk != null & chk.Checked)
            {
                strname += hiddenField.Value + ',';
                count++;
            }
        }

        strname = strname.Trim(",".ToCharArray());
        Response.Write("Selected UserNames: <b>" + strname + "</b><br /><br />");

        string[] words = strname.Split(',');
        foreach (string word in words)
        {
            Response.Write(word + "<br />");
        }

        Response.Write(count.ToString() + "<br />");
    }

<asp:CheckBox ID="cb" runat="server" AutoPostBack="true" />
<asp:HiddenField ID="HiddenField1" runat="server" Value='<%#Eval("id")%>' />
<asp:Button runat="server" ID="btn" Text="Enviar" OnClick="btn_Click" Enabled="false" />

【问题讨论】:

  • 看起来您每次单击按钮时都将计数设置为 0...是否不应该从 page.load 方法维护该变量?
  • page.load 方法不维护变量计数

标签: c# checkbox


【解决方案1】:

因为 Page_Load 在 btn_Click 之前触发。我建议您将代码的事件更改为 Page_PreRender

protected void Page_PreRender(object sender, EventArgs e)
{
        if (count == 3)
        {
            btn.Enabled = true;
        }
        else
        {
            btn.Enabled = false;
        }
}

【讨论】:

  • 谢谢,但我的代码没有更改... GridView 中的按钮始终处于禁用状态
【解决方案2】:

您应该使用 OnCheckedChanged 事件。

修改你的aspx页面:

<asp:CheckBox ID="cb" runat="server" AutoPostBack="true" 
  OnCheckedChanged="CheckBox1_CheckedChanged" />

在后面修改你的代码:

protected void CheckBox1_CheckedChanged(object sender, EventArgs e)
{
    CheckBox chkTest = (CheckBox)sender;
    GridViewRow grdRow = (GridViewRow)chkTest.NamingContainer;
    count = 0;

    foreach (GridViewRow gvrow in GridView1.Rows)
    {
        CheckBox chk = (CheckBox)gvrow.FindControl("cb");

        if (chk.Checked)
        {
            count++;
        }
    }

    if (count == 3)
    {
        btn.Enabled = true;
    }
    else
    {
        btn.Enabled = false;
    }

    Response.Write(count.ToString() + "<br />");
}

protected void btn_Click(object sender, EventArgs e)
{
    string strname = string.Empty;

    foreach (GridViewRow gvrow in GridView1.Rows)
    {
        HiddenField hiddenField = (HiddenField)gvrow.FindControl("HiddenField1");
        CheckBox chk2 = (CheckBox)gvrow.FindControl("cb");

        if (chk2 != null & chk2.Checked)
        {
            strname += hiddenField.Value + ","; 
            strname = strname.Trim(",".ToCharArray());
            Response.Write("Selected UserNames: <b>" + strname.ToString() + "</b><br />");

            string[] words = strname.Split(',');
            foreach (string word in words)
            {
                Response.Write(word.ToString() + "<br /><br />");
            }
        }
    }
}

【讨论】:

    猜你喜欢
    • 2023-03-30
    • 1970-01-01
    • 2014-05-21
    • 1970-01-01
    • 1970-01-01
    • 2012-06-10
    • 2012-06-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多