C# DataGridView只读“;臭虫“;

C# DataGridView只读“;臭虫“;,c#,.net,winforms,datagridview,C#,.net,Winforms,Datagridview,我有一个datagridview来显示一些数据。数据之间的一些行是分隔行,因此这些是只读的。在某些情况下,整个datagridview可能是readonly。但当我将其切换回readonly=false时,所有行都是可编辑的。如果我们不必再次手动设置每行的readonly属性,我的行是否会恢复到以前的状态?如果该类是由您自己实现的,那么您可以设置您的DataGrid1.readonly=true,并将需要只读的属性设置为readonly 像这样: string _myProperty; publ

我有一个
datagridview
来显示一些数据。数据之间的一些行是分隔行,因此这些是只读的。在某些情况下,整个
datagridview
可能是
readonly
。但当我将其切换回
readonly=false
时,所有行都是可编辑的。如果我们不必再次手动设置每行的
readonly
属性,我的行是否会恢复到以前的状态?

如果该类是由您自己实现的,那么您可以设置您的
DataGrid1.readonly=true
,并将需要只读的属性设置为readonly

像这样:

string _myProperty;
public string MyProperty
{
   get{return _myProperty;}
}

如果手动使用代码填充DataGridView,而不是将其绑定到数据源,那么在添加行时,只需将行的readonly属性设置为true即可


如果上面的内容不起作用,那么我不明白你的代码实际上是做什么的,就像@Dilshod说的,如果你发布它,或者至少链接到它的要点(),会很方便。

据我所知,使用Reflector,将
DataGridView.ReadOnly
设置为
true
也会将网格中所有行和列的
ReadOnly
设置为
false
——假设您以后再也不想将
DataGridView.ReadOnly
设置为
false

因此,我能看到的唯一解决方法是“记住”哪些行应该是只读的,例如通过在
DataGridViewRow.Tag
中设置合适的值,然后使用该值手动恢复
ReadOnly
状态

例如,如果已将只读行的
DataGridViewRow.Tag
属性设置为
true
,则可以使用类似以下未测试代码的处理程序处理
DataGridView.ReadOnlyChanged
事件:

void DataGridView_ReadOnlyChanged(object sender, EventArgs e)
{
    DataGridView dataGridView = (DataGridView) sender;
    if (!dataGridView.ReadOnly)
    {
        // DataGridView.ReadOnly has just been set to false, so we need to 
        // restore each row's readonly state.
        foreach(DataGridViewRow row in dataGridView.Rows)
        {
            if (row.Tag != null && ((bool)row.Tag))
            {
                row.ReadOnly = true;
            }
        }
    }
}
然而,
DataGridView
的设计显然不允许以这种方式切换其
ReadOnly
属性。也许您可以设计您的应用程序,这样您就不需要将
DataGridView.ReadOnly
设置为
true


例如,如果您想通过双击单元格来阻止用户编辑,您可以将
DataGridView.EditMode
设置为
DataGridView.EditMode。以编程方式编辑
,而不是将
DataGridView.ReadOnly
设置为
true

是的。。。对不起,我的错误,我的意思是将readonly=false的单元格设置为readonly=false,将readonly=true的单元格设置为readonly=true。我很抱歉不清楚我没有实现这个类。。。但是datagridview没有绑定。我用我的代码填充它这是一个相当长的代码。我真的看不出发布它有什么用,所以我没有将它包含在原始的post中,我建议为它创建类,您可以轻松地将它绑定到DataGrid或其他任何东西。这就是我所做的。我在创建行时设置readonly属性。但在某些情况下,datagridview变为只读(全部),但某些用户有能力将其恢复为readonly=false,当他们这样做时,整个网格变为readonly=false,即使是不支持在所有其他位置可编辑的行,我相信您可以切换
.Enabled
,而无需更改单独的行
。只读
值。@Ginosaji,请参阅更新,切换
编辑模式
可能比切换
Enabled
更好,据推测,这仍将允许您从网格中选择值。我将尝试查看EditMode,否则我将不得不在所有行上再次循环,以将它们设置回原来的状态be@Ginosaji我不相信行/单元格上有任何启用,它只在datagridview上lvl@im_a_noob:我的意思是在网格级别使用
启用
,并且行/单元格级别的
只读
,这样就不会有冲突,也不会被覆盖。虽然如果编辑模式像乔说的那样工作,那将是一个更好的解决方案。