Datagridview使用<datagridviewcheckboxcolumn>在某个单元格上添加Checkbox,而不是列

时间:2017-06-12 05:54:34

标签: c# checkbox datagridview

我有一个绑定到List的DataGirdView

我想在CheckBox的某个单元格上添加DataGridViewCheckBoxCell,但这不是我的datagridview上显示的控制器。以下是我的代码:

class ColumnNames
{
    public string Check { get; set; }
    public string Index { get; set; }
    public string SubIndex { get; set; }
    public string Name { get; set; }
    public string Value { get; set; }

    public ColumnNames(
        string Check,
        string Index,
        string SubIndex,
        string Name,
        string Value
        )
    {
        this.Check = Check;
        this.Index = Index;
        this.SubIndex = SubIndex;
        this.Name = Name;
        this.Value = Value;
    }
}

itemsList.Add(new ColumnNames(Check, Index, SubIndex, Name, DataType));
datagridview.DataSource = itemsList;
datagridview.Rows[0].ReadOnly = true;
datagridview.Rows[0].Cells[0] = new DataGridViewCheckBoxCell();
datagridview.Rows[0].Cells[0].Value = false;

当我运行此代码时,我只在cell [0]上获得字符串'false'。 我使用断点监视此单元格,此单元格为“Datagirdviewcheckboxcell”,但此处没有复选框控制器。 我怎么解决这个问题?谢谢!

1 个答案:

答案 0 :(得分:1)

我认为你在这一行设置new ColumnNames(Check, Index, SubIndex, Name, DataType)检查为&#34;字符串&#34;有价值&#34;假&#34;。

将ColumnNames更改为:

 ...
 public bool Check { get; set; }
 ...
   public ColumnNames(bool Check, ...)
   {
        this.Check = Check;
        ...
   }
 ...

然后只是:

        List<ColumnNames> itemsList = new List<ColumnNames>();
        itemsList.Add(new ColumnNames(true,"Index", "SubIndex", "Name", "DataType"));
        dataGridView1.DataSource = itemsList;

结果:

无需:datagridview.Rows[0].Cells[0] = new DataGridViewCheckBoxCell();

如果您需要在一列中使用不同类型的单元格,则必须使用自定义DataGridViewColumn。

根据这个答案:creating a custom column type? 您有两个教程:

然后根据值类型在您的类和自定义实现绘制单元格中坚持使用Check属性的对象类型。

类似的东西:

switch(Check.GetType()){
      case typeof(Boolean): /* draw CheckBox */ break;
      default: /* draw string */ break; //you can keep string in default with all other types.
}