DataGridView只读“bug”

时间:2013-03-19 19:48:35

标签: c# .net winforms datagridview

我有datagridview来显示一些数据。数据之间的某些行为separator rows,因此这些行为readonly。在某些情况下,整个datagridview可能是readonly。但当我将其切换回readonly = false时,所有行都是可编辑的。是否可以手动重新设置每行的readonly属性,以便我的行恢复原状?

3 个答案:

答案 0 :(得分:4)

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

所以我能看到的唯一方法就是“记住”哪些行应该是ReadOnly,例如在DataGridViewRow.Tag中设置一个合适的值,然后使用它来恢复{{ 1}}手动状态。

例如,如果您将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,而不是将DataGridViewEditMode.EditProgramatically设置为DataGridView.ReadOnly }。

答案 1 :(得分:0)

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

像这样:

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

答案 2 :(得分:0)

如果使用代码手动填充DataGridView而不是将其绑定到DataSource,则可以在添加时将行的readonly属性设置为true。

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