我有datagridview
来显示一些数据。数据之间的某些行为separator rows
,因此这些行为readonly
。在某些情况下,整个datagridview
可能是readonly
。但当我将其切换回readonly = false
时,所有行都是可编辑的。是否可以手动重新设置每行的readonly
属性,以便我的行恢复原状?
答案 0 :(得分:4)
据我所知,使用Reflector,将DataGridView.ReadOnly
设置为true
也会为网格中的所有行和列设置ReadOnly
到false
- 可能是假设您以后再也不想将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} })。