【问题标题】:How to disable a checkbox column on clicking of another checkbox column in DatagridView如何在单击 DatagridView 中的另一个复选框列时禁用复选框列
【发布时间】:2013-06-08 04:46:54
【问题描述】:

我有两个 ckecboxes(错误和启用)如下

如果我取消选中“启用”复选框,相应的“错误”复选框将变为灰色。

我尝试如下,但没有启用或禁用属性

    void dgRulesMaster_CellContentClick(object sender, DataGridViewCellEventArgs e)
    {
      if (e.RowIndex > -1 & e.ColumnIndex == 3)
      {
   var editingCellFormattedValue = Convert.ToBoolean(((DataGridViewCheckBoxCell)dgRulesMaster.Rows[dgRulesMaster.CurrentRow.Index].Cells[3]).EditingCellFormattedValue);

     if (editingCellFormattedValue == false)
     {
          dgRulesMaster[2, e.RowIndex].ReadOnly = true;
     }
  }    
}

【问题讨论】:

  • 您的代码是否包含在 if 语句中? DataGridViewCheckBoxCell 是否有 Checked 属性?

标签: c# winforms datagridviewcolumn datagridviewlinkcolumn


【解决方案1】:

再次,使用自定义绘画(我喜欢它:),我想当 Cell 为 ReadOnly 时应该看起来像 Disable,当然它仅适用于 DataGridViewCheckBoxColumn,这是我的代码:

void dgRulesMaster_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
  if (e.RowIndex > -1 & e.ColumnIndex == 3)
  {
    var editingCellFormattedValue = Convert.ToBoolean(((DataGridViewCheckBoxCell)dgRulesMaster.Rows[dgRulesMaster.CurrentRow.Index].Cells[3]).EditingCellFormattedValue);

    if (editingCellFormattedValue == false)
    {
      dgRulesMaster[2, e.RowIndex].ReadOnly = true;
      dgRulesMaster.InvalidateCell(2,e.RowIndex);
    }
  }   
 } 
 //And here is the CellPainting event handler for your dataGridView
 private void dgRulesMaster_CellPainting(object sender, DataGridViewCellPaintingEventArgs e){
    if (e.ColumnIndex > -1 && e.RowIndex > -1 && 
       dgRulesMaster.Columns[e.ColumnIndex] is DataGridViewCheckBoxColumn && dgRulesMaster[e.ColumnIndex, e.RowIndex].ReadOnly)
        {
            Size checkSize = CheckBoxRenderer.GetGlyphSize(e.Graphics, System.Windows.Forms.VisualStyles.CheckBoxState.CheckedNormal);                
            e.Handled = true;
            e.PaintBackground(e.CellBounds, true);
            if (e.Value != null)
            {
                CheckBoxRenderer.DrawCheckBox(e.Graphics, new Point(e.CellBounds.X + e.CellBounds.Width / 2 - checkSize.Width / 2, e.CellBounds.Y + e.CellBounds.Height / 2 - checkSize.Height / 2), 
               (bool)e.Value ? System.Windows.Forms.VisualStyles.CheckBoxState.CheckedDisabled : System.Windows.Forms.VisualStyles.CheckBoxState.UncheckedDisabled);                    
            }
        }
  }    

【讨论】:

  • 'System.Windows.Forms.DataGridViewCell' 不包含'InvalidateCell' 的定义,并且没有扩展方法'InvalidateCell' 接受'System.Windows.Forms.DataGridViewCell' 类型的第一个参数找到(您是否缺少 using 指令或程序集引用?)
  • 再次抱歉,我刚才自己打错了,那是 `DataGridView.InvalidateCell()',它有 'Invalidate(), InvalidateCell(), InvalidateRow()... 抱歉跨度>
猜你喜欢
  • 1970-01-01
  • 2011-05-24
  • 1970-01-01
  • 2019-06-08
  • 2018-02-21
  • 2011-08-28
  • 1970-01-01
相关资源
最近更新 更多