簡體   English   中英

計算C#中GridView中選中的復選框的數量

[英]Count number of checked checkboxes in GridView in c#

當所選復選框的數量等於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" />

因為Page_Load在btn_Click之前觸發。 我建議您將代碼事件更改為Page_PreRender

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

您應該使用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 />");
            }
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM