【问题标题】:Programmatically uncheck checkboxcolumn in datagridview以编程方式取消选中 datagridview 中的复选框列
【发布时间】:2011-01-18 14:43:55
【问题描述】:

如何以编程方式取消选中 datagridview 中 DataGridViewCheckboxColumn 中的所有行?

我可以使用

获得复选框的正确值
(bool)row.Cells[CheckBoxColumn.Index].FormattedValue

但这只是一个吸气剂。

我尝试使用设置单元格的值

(bool)row.Cells[CheckBoxColumn.Index].value = false

但这不会影响 FormattedValue。

我该如何解决这个问题?

【问题讨论】:

    标签: c# winforms datagridview datagridviewcheckboxcell


    【解决方案1】:

    你做某事。喜欢:

    (row.Cells[CheckBoxColumn.Index] as DataGridViewCheckBoxCell).value = false;
    

    您只是忘记转换为正确的类型,泛型DataGridViewCell 不知道它的值类型。

    【讨论】:

    • 这种作品。您的代码不会影响 FormattedValue,我用它来获取复选框的值。我们可以把问题转过来,把责任归咎于 FormattedValue。你看,当我尝试从 (row.Cells[CheckBoxColumn.Index] as DataGridViewCheckBoxCell).value 获取布尔值时,应用程序崩溃了。这让我有必要坚持使用 FormattedValue。
    • 我其实是用这个来设置值的,但是没有用
    【解决方案2】:

    您是否尝试过将复选框列中的第一个控件转换为复选框,然后将“已选中”设置为 true?

    尝试到这种程度。

    ((DataGridViewCheckBoxCell)e.Rows[0].Cells[0]).Selected = true
    

    【讨论】:

    • 也许是代码 sn-p? “第一个控制”是什么意思?行、单元格...?
    • 一个datagridviewrow没有.Controls[]。
    【解决方案3】:

    没查过,可以试试;

    CheckBox cb = (row.Cells[CheckBoxColumn.Index].Controls[0] as CheckBox);
    if(cb != null)
    {
        cb.Checked = false;
    }
    

    它的类型可能不同。只需调试并将其转换为原来的样子。

    【讨论】:

    • 一个datagridviewcell没有.Controls[]
    【解决方案4】:
    foreach (DataGridViewRow dr in dataGridView1.Rows)
    {
      dr.Cells[0].Value = true;//sıfırın
    }
    

    【讨论】:

    • 当您在此处发布内容时,请务必将您的代码(或至少是 cmets)翻译成英文
    【解决方案5】:

    如果你使用 dataGridView1_ContextClick 只是为了做“假” datagidviewCheckBox 列需要这个代码:

    dataGridView1.CancelEdit();
    

    但如果您需要 DataGrid 的所有 CheckBoxColumns 行:

    private void button1_Click(object sender, EventArgs e)
    {
        foreach (DataGridViewRow r in dataGridView1.Rows)
        {
            r.Cells["statusBox"].Value = true;
        }
    }
    

    【讨论】:

      【解决方案6】:

      取决于你想做什么

      如果是关于所选行,那么您可以:

      DataGridViewRow row = dataGridViewName.CurrentRow;
      
      //This will assign the opposite value of the Cell Content
      row.Cells["ColumnName"].Value = !Convert.ToBoolean(row.Cells["ColumnName"].Value);
      

      但是,如果您希望为整个 DataGridView 表这样做,那么:

          foreach (DataGridViewRow row in dataGridViewName.Rows)
      
         {
              //This will assign the opposite value of the Cell Content
              row.Cells["ColumnName"].Value = !Convert.ToBoolean(row.Cells["ColumnName"].Value);
         }
      

      任何适合你的东西。继续加油!

      【讨论】:

        【解决方案7】:

        你应该在检查后使用YourDataGridview.EndEdit()

        (row.Cells[CheckBoxColumn.Index] as DataGridViewCheckBoxCell).value = false;
        YourDataGridview.EndEdit();
        

        【讨论】:

          【解决方案8】:

          循环遍历每一行grid view并使用find控件方法:

          foreach ( GridViewRow row in myGridView )
          {
               CheckBox checkBox = ( CheckBox ) row.FindControl( "myCheckBox" );
               checkbox.Checked = false;
          }
          

          【讨论】:

          • 也许 FindControl 只是用于网络的东西?我正在开发一个 WinForms 应用程序。
          【解决方案9】:
           foreach (DataGridViewRow row in datagridviewname.Rows)
          
            {
              row.Cells[CheckBoxColumn1_Name].Value = false;
            }
          

          【讨论】:

            猜你喜欢
            • 2017-02-21
            • 1970-01-01
            • 2023-03-30
            • 2017-09-21
            • 2013-05-18
            • 2012-12-09
            • 2011-08-11
            • 1970-01-01
            • 2011-11-15
            相关资源
            最近更新 更多