C# Can';t在dataGridView中将复选框标记为true

C# Can';t在dataGridView中将复选框标记为true,c#,winforms,datagridview,C#,Winforms,Datagridview,我有一个dataGridView,其中填充了来自EF数据库的数据: efcontext.Users.Load(); dataGridView1.DataSource=ctx.Users.Local.ToBindingList(); 然后我给它添加一列 DataGridViewCheckBoxColumn newCol=newDataGridViewCheckBoxColumn(); DataGridViewCheckBoxCell=新DataGridViewCheckBoxCell(); ce

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

efcontext.Users.Load();
dataGridView1.DataSource=ctx.Users.Local.ToBindingList();
然后我给它添加一列

DataGridViewCheckBoxColumn newCol=newDataGridViewCheckBoxColumn();
DataGridViewCheckBoxCell=新DataGridViewCheckBoxCell();
cell.UndeterminateValue=假;
cell.TrueValue=true;
cell.false值=false;
newCol.CellTemplate=单元格;
newCol.HeaderText=“选择”;
newCol.Name=“已选定”;
newCol.Visible=true;
newCol.ValueType=typeof(bool);
dataGridView1.Columns.Add(newCol);
在程序的后面,我想遍历每一行,并将其中一些行标记为选中。 我使用以下代码执行此操作:

for(int i=0;i
但这并没有改变任何事情。我尝试过在之后刷新dataGridView,也没有使用
true
而是使用
chk.TrueValue
,但这也不起作用。如何将复选框标记为true? 这不仅仅是标记复选框的视觉方面的问题,因为在检索这些行之后,所有行都是false,因此问题在于此单元格的值及其图形表示

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

如果在load方法中的initialize组件和for部分之后执行datasource部分,它就可以工作

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;
            }
        }
}
private void YourForm\u加载(对象发送方,事件参数e)
{
对于(int i=0;i
如果在加载方法中的初始化组件和for部分之后执行datasource部分,则它会起作用

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;
            }
        }
}
private void YourForm\u加载(对象发送方,事件参数e)
{
对于(int i=0;i
您添加的列是一个未绑定的列。您希望更改什么?复选框“状态外观”或实体中的属性?@RezaAghaei我希望复选框“状态”更改。因为我只需要获取所选行的值并将其发送到其他地方。而您不需要设置c用于
DataGridViewCheckBoxColumn
的EL模板,但代码按预期工作并检查记录。您需要确保代码正在运行,还需要确保您使用的条件正确。我已尝试此代码。只有在将所有复选框添加到新列后执行for部分时,for部分才对我有效。Basically我在windows窗体的InitializeComponent方法之后执行了datasource部分。我将for部分放在load方法中。但我认为这不是正确的方法。更好的解决方案是在类中添加一个布尔值,然后只使用datasourceproperty@matteocracco谢谢,这就是问题所在!dataGridView绑定处于_加载状态,我已将检查循环从_加载移动到_显示,现在正在标记复选框。如果您想将其放入回答中,我将很乐意接受。您添加的列是未绑定列。您希望更改什么,复选框检查状态外观或您数据库中的属性entity?@RezaAghaei我想更改复选框的状态。因为我只需要获取所选行的值并将它们发送到其他地方。虽然您不需要为
DataGridViewCheckBoxColumn
设置单元格模板,但代码按预期工作并检查记录。您需要确保代码正在运行并且还要确保您使用的条件是正确的。我已经尝试过这段代码。只有在将所有复选框添加到新列后执行for部分时,for部分才对我有效。基本上,我是在windows窗体的InitializeComponent方法之后执行datasource部分的。我已经将for部分放在load方法中。但是我我不认为这是正确的方法。更好的解决方案是向类中添加一个布尔值,然后只使用数据源property@matteocracco谢谢,这就是问题所在!dataGridView绑定处于加载状态,我已将检查循环从加载状态移动到显示状态,现在正在标记复选框。如果要将我会欣然接受你的回答。