【问题标题】:how to check whether checkbox is checked in datagridview column如何检查是否选中了datagridview列中的复选框
【发布时间】:2014-01-11 10:01:59
【问题描述】:

我在加载数据的 Windows 窗体中有一个 Datagridview。我还在运行时为此 Datagridview 添加了一个复选框列。我的问题是我如何知道复选框列中的任何复选框是否已被选中,以及是否已选中复选框启用按钮。我已经使用 CellValueChanged 事件来执行上述任务,但无法得到想要的结果。

这就是我所做的

 List<int> ChkedRow = new List<int>();

        for (int i = 0; i <= Datagridview1.RowCount - 1; i++)
        {
            if (Convert.ToBoolean(Datagridview1.Rows[i].Cells["chkcol"].Value) == true)
            {
                button1.Enabled = true;
            }
            else
            {
                button1.Enabled = false;
            }

        }

【问题讨论】:

    标签: c# winforms checkbox datagridview


    【解决方案1】:

    在循环之前设置false

    button1.Enabled = false;
    

    当您找到选中的项目时,将其设置为启用truebreak 循环

    button1.Enabled = true;
    break;
    

    代码:

    button1.Enabled = false;
    for (int i = 0; i <= Datagridview1.RowCount - 1; i++)
    {
    
        if (Convert.ToBoolean(Datagridview1.Rows[i].Cells["chkcol"].Value))
        {
            button1.Enabled = true;
            break;
        }
    }
    

    或者你也可以这样做

    button1.Enabled = false;
    foreach (DataGridViewRow row in dataGridView1.Rows)
    {
       DataGridViewCheckBoxCell cell = row.Cells[colCheckIndex] as DataGridViewCheckBoxCell;
       if (cell.Value == cell.TrueValue){
          button1.Enabled = true;
          break;
        }
    }
    

    【讨论】:

    • 请注意,我想检查是否已选中任何一个复选框。即用户选中列中的任何复选框,应启用按钮,如果未选中任何复选框,则应禁用按钮。
    【解决方案2】:

    试试这个代码

    button1.Enabled = false;
    foreach (DataGridViewRow row in Datagridview1.Rows)
    {
        if (((DataGridViewCheckBoxCell)row.Cells["chkcol"]).Value)
          {
            button1.Enabled = true;
            break;
          }
    
    }
    

    //This will always call the checking of checkbox whenever you ticked the checkbox in the datagrid
    private void DataGridView1_CellValueChanged(
        object sender, DataGridViewCellEventArgs e)
    {
        if (e.ColumnIndex == [Your column index])
           CheckForCheckedValue();
    }
    
    private void CheckForCheckedValue()
    {
       button1.Enabled = false;
       foreach (DataGridViewRow row in Datagridview1.Rows)
       {
        if (((DataGridViewCheckBoxCell)row.Cells["chkcol"]).Value)
          {
            button1.Enabled = true;
            break;
          }
       }
    }
    

    注意 不要忘记检查 for Null 值,如果它是 NULL 则做一些事情

    【讨论】:

    • 以上代码有效,但是当我取消选中所有复选框时,按钮未被禁用。甚至在其他部分添加了 button1.Enabled = false。
    • 你应该在datagridview的CellValueChanged里面添加调用这个函数,并检查复选框的单元格是否是改变值的单元格,然后执行代码
    猜你喜欢
    • 2013-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-14
    • 2019-11-19
    • 1970-01-01
    相关资源
    最近更新 更多