Подсчитайте количество отмеченных флажков в GridView в c #

1

Я попытался включить кнопку в GridView, когда количество выбранных флажков равно 3.

Я использовал этот код, но кнопка в 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
    похоже, вы устанавливаете счетчик в 0 каждый раз, когда нажимаете кнопку ... разве эта переменная не должна поддерживаться из метода page.load?
  • 0
    количество переменных не поддерживается из метода page.load
Теги:
checkbox

2 ответа

0
Лучший ответ

Вы должны использовать событие 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 />");
            }
        }
    }
}
  • 0
    Хорошо.Спасибо!
0

Потому что перед запуском btn_Click запускается Page_Load триггер. Я предлагаю вам изменить событие ваших кодов на Page_PreRender:

protected void Page_PreRender(object sender, EventArgs e)
{
        if (count == 3)
        {
            btn.Enabled = true;
        }
        else
        {
            btn.Enabled = false;
        }
}
  • 0
    спасибо, но у меня нет изменений в моем коде ... кнопка в GridView всегда отключена

Ещё вопросы

Сообщество Overcoder
Наверх
Меню