2013-03-19 78 views
3

我有一个datagridview显示一些数据。数据之间有一些行separator rows所以这些都是readonly。在某些情况下,整个datagridview可能是readonly。但是当我将其切换回readonly = false时,所有行都是可编辑的。是否有可能无法再手动设置每行的readonly属性,我的排又回到了以前的状态?的DataGridView只读“错误”

+0

= true?......... – Sayse 2013-03-19 19:51:52

+0

是啊......对不起,我的意思是将readonly = false的单元格设置为readonly = false,而readonly = true则为readonly = true。我很抱歉不清楚 – 2013-03-19 19:55:19

回答

4

至于我可以看到使用反射器,设置DataGridView.ReadOnlytrue还将设置ReadOnlyfalse在网格中的所有行和列 - 大概是假设你永远随后要再次设置DataGridView.ReadOnlyfalse

所以我可以看到你为了避开这个唯一的办法,就是“记住”这行应该由DataGridViewRow.Tag设置一个合适的值,然后使用该手动还原ReadOnly状态是只读的,例如。然而,它似乎很清楚

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; 
      } 
     } 
    } 
} 

例如,如果你设置的DataGridViewRow.Tag属性true为只读行,你可以处理DataGridView.ReadOnlyChanged事件与处理程序,看起来像下面未经测试的代码该DataGridView没有设计成允许其ReadOnly属性来以这种方式进行切换。也许你可以设计自己的应用程序,让你永远不要需要设置DataGridView.ReadOnlytrue

例如,如果要防止用户通过双击单元格编辑,你可以设置DataGridView.EditModeDataGridViewEditMode.EditProgramatically,而不是设置DataGridView.ReadOnlytrue

+0

或者,我相信你可以切换'。启用'而不更改单独的行'.ReadOnly'值。 – JosephHirn 2013-03-20 11:53:55

+0

@Ginosaji,看到更新,切换'EditMode'可能比切换'Enabled'好,因为大概这仍然允许您从网格中选择值。 – Joe 2013-03-20 11:55:46

+0

我会尝试看看EditMode 或者我将不得不再次循环遍历所有行,将它们设置为 – 2013-03-20 13:19:33

0

如果类自己实现,那么你可以设置你的DataGrid1.ReadOnly = true,使这些需要是只读属性为只读。

这样的:

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

我没有实现类,但datagridview没有绑定。我用我的代码 – 2013-03-19 20:14:44

+0

填写它可以提供代码来填充DataGrid吗? – Dilshod 2013-03-19 20:17:35

+0

这是一个很长的代码。我真的没有看到任何用它来发布它,所以这就是为什么我没有把它包含在原来的帖子 – 2013-03-19 20:19:40

0

如果通过手工填写在DataGridView的代码,而不是将它绑定到数据源,那么你可以一排的只读属性只需设置为true,当你添加它。

如果上述方法不起作用,那么我不明白你的代码实际上做了什么,就像@Dilshod说过,如果你发布它,或者至少与它的要点(http://www.gist.github.com)联系起来会很方便。

+0

这就是我所做的。我在创建行时设置了只读属性。但是在某些情况下,datagridview只能读取(全部),但是某些用户有能力将其重新设置为readonly = false,并且当他们这样做时,整个网格变为readonly = false,即使是未被编辑为可编辑的行在所有 – 2013-03-20 11:14:48