无法在dataGridView中将复选框标记为true

时间:2019-11-21 09:04:03

标签: c# winforms datagridview

我有一个dataGridView,其中填充了EF数据库中的数据:

efcontext.Users.Load();
dataGridView1.DataSource = ctx.Users.Local.ToBindingList();

然后我在其中添加一列

DataGridViewCheckBoxColumn newCol = new DataGridViewCheckBoxColumn();
DataGridViewCheckBoxCell cell = new DataGridViewCheckBoxCell();
cell.IndeterminateValue = false;
cell.TrueValue = true;
cell.FalseValue = false;
newCol.CellTemplate = cell;
newCol.HeaderText = "Select";
newCol.Name = "selected";
newCol.Visible = true;
newCol.ValueType = typeof(bool);
dataGridView1.Columns.Add(newCol);

稍后在程序中,我要遍历每一行并将某些行标记为选中。 我是用以下代码完成的:

for (int i = 0; i < dataGridView1.RowCount; i++)
{
    DataGridViewCheckBoxCell chk = (DataGridViewCheckBoxCell)dataGridView1.Rows[i].Cells["selected"];
    if(something)
    {
        chk.Value = true;
    }
    else
    {
        chk.Value = false;
    }

但这不会改变任何东西。我尝试过之后刷新dataGridView,并且也没有使用true来代替chk.TrueValue,但这还是行不通的。如何将复选框标记为true? 这不仅是带有标记的复选框的外观方面的问题,因为在检索这些行之后,所有这些行都是假的,因此问题在于此单元格的值及其图形表示形式。

更新1: 我不需要更改EF中的实体,只需更改dataGridView中的单元格值即可。

1 个答案:

答案 0 :(得分:2)

如果您在初始化组件之后立即执行数据源部分,并在load方法中执行for部分,则该方法有效

public YourForm()
            {
                InitializeComponent();
                dataGridView1.DataSource = ctx.Users.Local.ToBindingList();
                DataGridViewCheckBoxColumn newCol = new DataGridViewCheckBoxColumn();
                DataGridViewCheckBoxCell cell = new DataGridViewCheckBoxCell();
                cell.IndeterminateValue = false;
                cell.TrueValue = true;
                cell.FalseValue = false;
                newCol.CellTemplate = cell;
                newCol.HeaderText = "Select";
                newCol.Name = "selected";
                newCol.Visible = true;
                newCol.ValueType = typeof(bool);
                dataGridView1.Columns.Add(newCol);    
            }

表单加载方法中的代码

private void YourForm_Load(object sender, EventArgs e)
{
        for (int i = 0; i < dataGridView1.RowCount; i++)
        {
            DataGridViewCheckBoxCell chk = (DataGridViewCheckBoxCell)dataGridView1.Rows[i].Cells["selected"];
            if(something)
            {
                chk.Value = true;
            }
            else
            {
                chk.Value = false;
            }
        }
}