我通过列表加载 DataGridView。
datagridview.DataSource = listaVariables;
此 DatagridView 由 DataGridViewCheckBoxCell 类型的列(第一列)组成。
我想要做的是,根据列表变量的属性,它是否被激活为选中状态。
我试图这样做:
datagridview.Rows[pos].Cell[0].Value = true; //pos es un entero que utilizo para recorrer las filas y pongo 0 en Cell porque es la primera columna la que tiene los CheckBox
它什么也不做,它让它不受控制。
我还尝试通过将 DataGridViewCheckBoxCell 设置为 true 来创建一个类型为 DataGridViewCheckBoxCell 的单元格,但它也不起作用,它给了我一个单元格格式错误(System.FormatException:单元格的格式化值的类型错误):
DataGridViewCheckBoxCell dC = new DataGridViewCheckBoxCell(true);
datagridview.Rows[pos].Cell[0] = dC;
在最后一个测试中,我相信我创建的单元格(尽管它不允许我分配它)也不会将包含它的复选框设置为 true。
我也尝试过:
dataGridView.Rows[pos].SetValues(true); //Se supone que la primera celda de la fila la debería poner a true y no lo hace
是
var values = new bool[] { true };
dataGridView.Rows[pos].SetValues(values);
我继续得到相同的结果,它没有显示激活的复选框。
我加载数据网格的列表是这样定义的:
List<PlacaVariableP> listaVariables;
变量对象如下:
public class PlacaVariableP:IComparable
{
public virtual long id_placavariable { get; set; }
public virtual long idplaca { get; set; }
public virtual string descripcion { get; set; }
public virtual string unidades { get; set; }
public virtual string idFichero { get; set; }
public virtual int CompareTo(object obj)
{
PlacaVariableP c = (PlacaVariableP)obj;
return String.Compare(this.descripcion, c.descripcion, StringComparison.Ordinal);
}
public virtual void toString(object obj)
{
obj.ToString();
}
}
问题是在使用 DataGridView 时,您有两种方法:
这样,您可以通过 DataSource 属性设置要在 DataGridView 中显示的内容,这就是显示的信息。
如果要进行更改,则必须在已建立为 DataSource 的对象中进行更改并重新关联它。您不能直接修改单元格的内容。
您可以通过将 DataGridViewRow 对象添加到 DataGridView 的 Rows 集合并为每个单元格设置值来填充内容。
这样您就可以直接操作单元格的内容。
因此,如果您要使用 DataSource,则与 DataSource 关联的列表中包含的元素应该具有设置类型检查列的值的属性。
你可以这样做:
这样,DataSource 的元素将具有一个属性(在示例中
columnaCheck
),其中包含列的值。您可以使用 DataGridViewCheckBoxColumn。一个简单的例子是: