当前位置: 首页 > 知识库问答 >
问题:

如果未选中Gridview行中的所有复选框,则取消选择复选框标题

夏知
2023-03-14

如问题所述,当选中标题中的“全选”复选框时,我已经可以选中gridview行中的复选框,当取消选中标题中的“全选”复选框时,取消选中gridview行中的复选框。我想做的是,当没有选中行中的所有复选框时,则不选中标题中的“全选”复选框,反之亦然(当选中行中的所有复选框时,则选中标题中的“全选”复选框)。

我该怎么做?

我已经做了我想要实现的,但是标题中的复选框开始影响(选中或取消选中),即使我只选中或取消选中行中的单个复选框,而不是所有行。

这是我正在使用的代码:

protected void checkAll_CheckedChanged(object sender, EventArgs e)
    {
        CheckBox ChkBoxHeader = (CheckBox)GridView1.HeaderRow.FindControl("checkAll");

        foreach (GridViewRow row in GridView1.Rows)
        {
            CheckBox ChkBoxRows = (CheckBox)row.FindControl("chkbx_select");

            if (ChkBoxHeader.Checked)
            {
                ChkBoxRows.Checked = true;
            }

            else
            {
                ChkBoxRows.Checked = false;
            }
        }
    }

protected void chkbx_select_CheckedChanged(object sender, EventArgs e)
    {
        CheckBox chkbx_select =  (CheckBox)sender;

        CheckBox ChkBoxHeader = (CheckBox)GridView1.HeaderRow.FindControl("checkAll");

        foreach (GridViewRow row in GridView1.Rows)
        {
            if (chkbx_select.Checked)
            {
                ChkBoxHeader.Checked = true;
            }

            else
            {
                ChkBoxHeader.Checked = false;
            }
        }
    }

非常感谢你的回答。

谢谢你。

共有1个答案

壤驷英叡
2023-03-14

想法是在每个CheckedChanged事件上迭代所有复选框(在所有行中),并确保所有复选框都被选中。像这样的

protected void chkbx_select_CheckedChanged(object sender, EventArgs e)
{    
        CheckBox chkbx_select =  (CheckBox)sender;
        CheckBox ChkBoxHeader = (CheckBox)GridView1.HeaderRow.FindControl("checkAll");

        if(!chkbx_select.Checked)
        {
           // Checkbox was unchecked, 
           // short circuit, set Select All Checkbox.Checked = false and return

           ChkBoxHeader.Checked = false;
           return;
        }

        bool allChecked = true;
        foreach (GridViewRow row in GridView1.Rows)
        {
            // this is pseudocode, find checkbox on each row
            var checkBox = row.FindControl("Checkbox") 

            if (!checkbox.Checked)
            {
                allChecked = false;
                break;
            }
        }

        ChkBoxHeader.Checked = allChecked;
  }
 类似资料:
  • 我创建了一个windows窗体(到目前为止)只包含复选框。构造函数接受一个参数:。对于这个数组中的每个字符串,我都会创建一个复选框。 例如: null 那么,当另一个复选框调用uncheck时,是否有一种方法可以告诉我的复选框不要运行? 下面是我的代码(它都是手工编写的,所以没有使用visual studio设计器):

  • 如果选中复选框D并取消选中其他复选框,我希望选中复选框K和F。同样,如果选中复选框I,则前面的复选框I将被选中,下面的复选框将被取消选中。我的html代码是: 我为此所做的是: 这看起来很乱,还有一个很酷的过程吗???

  • 我希望在选中表中的所有复选框时选中标题复选框,如果没有选中单个复选框,则应取消选中标题复选框。

  • 问题内容: 我有一组具有相同名称的输入复选框,并且我想确定已使用JavaScript选中了哪些复选框,如何实现呢?我只知道如何获取所有复选框,如下所示: 问题答案: 一个简单的for循环,用于测试属性并将选中的属性附加到单独的数组中。从那里,如果需要,您可以进一步处理数组。

  • 我正在尝试一个Woocommerce票证插件。默认情况下,该插件会显示一个表,其中包含多个票证变体作为产品,并在下面显示一个文本字段作为其数量和一个提交按钮,以将产品添加到购物车中。 我想用单选按钮或复选框替换这个文本字段,这样用户就可以选择一种类型的票证,然后点击提交按钮将其中的一部分添加到购物车中。 我的想法是在foreach循环中创建一个复选框或单选按钮,该复选框或单选按钮的值为quanti

  • 下载整个项目。zip在这里 此问题的代码在Views文件夹中的CreateSchedule.aspx文件中。 以下是GridView的ASP.NET: 在取消选中某个框后调试事件时,网页上的复选框显示为未选中,但的值为true,即使该复选框在网页上显示为未选中。(chkRow是未选中的复选框) 更新3 我取得了一些突破。我发现复选框的问题在于嵌套的gridview位于使用JavaScript折叠和