C# 如何允许以编程方式编辑datagridview?

C# 如何允许以编程方式编辑datagridview?,c#,datagridview,C#,Datagridview,我有一个连接到数据库的datagridview。我有一个复选框,用于在datagridview中编辑数据。如果选中该复选框,则只能编辑datagridview的1列,编辑后,单击“保存”按钮将其反映在数据库中,如果未选中该复选框,则禁用编辑 dataGridView1.Columns[0].ReadOnly = true; dataGridView1.Columns[1].ReadOnly = false; 我试过这样的方法: private void checkBox

我有一个连接到数据库的datagridview。我有一个复选框,用于在datagridview中编辑数据。如果选中该复选框,则只能编辑datagridview的1列,编辑后,单击“保存”按钮将其反映在数据库中,如果未选中该复选框,则禁用编辑

dataGridView1.Columns[0].ReadOnly = true;            
dataGridView1.Columns[1].ReadOnly = false;
我试过这样的方法:

private void checkBox1_CheckedChanged(object sender, EventArgs e)
    {
        if (checkBox1.CheckState == CheckState.Checked)
        {
            dataGridView1.CurrentRow.ReadOnly = false;
            dataGridView1.EditMode = DataGridViewEditMode.EditOnKeystrokeOrF2;
        }
        else if (checkBox1.CheckState == CheckState.Unchecked)
        {
            dataGridView1.ReadOnly = true;
        }
    }

此代码忽略了选择要编辑的列的概念。

要执行所需操作,必须仅设置要禁用的列

dataGridView1.Columns[0].ReadOnly = true;            
dataGridView1.Columns[1].ReadOnly = false;
但是,你想这样做吗?阻止整个列?

您可以尝试

if(dataGridView1.SelectedCells.Count>0) dataGridView1.SelectedCells[0].ReadOnly=false; 
而不是

dataGridView1.CurrentRow.ReadOnly=false;

for(int i=0;i仅当datagridview自身的只读属性设置为false时,本节中提供的帮助才有效。如果不是,则每列的只读属性将保持不变。当您使用智能标记选择并启用“使网格可编辑”时然后readonly属性被设置为false。另外,在新一代网格中的好处是,您不必像中那样查找列

foreach (var col in grid1.columns)

您可以将列的名称用作所选或默认的“column1.ReadOnly=false”。枚举器当然有它自己的优点。

OK。您的复选框控制数据是否可以编辑,对吗?但您也希望人们选择要编辑的列?他们应该如何在UI中进行编辑?