我有一个datagridview
显示一些数据。数据之间的某些行是separator rows
这样的readonly
。在某些情况下,整体datagridview
可能是readonly
. 但是当我将它切换回时readonly = false
,所有行都是可编辑的。是否有可能不必readonly
手动重新设置每一行的属性,我的行会像以前一样返回?
3 回答
据我所见,使用反射器,设置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
为DataGridViewEditMode.EditProgramatically
而不是设置DataGridView.ReadOnly
为true
。
如果该类是由您自己实现的,那么您可以设置您DataGrid1.ReadOnly = true
的属性并使属性 ReadOnly 需要为 ReadOnly。
像这样:
string _myProperty;
public string MyProperty
{
get{return _myProperty;}
}
如果您使用代码手动填充 DataGridView 而不是将其绑定到 DataSource,那么您可以在添加时简单地将行的 readonly 属性设置为 true。
如果上述方法不起作用,那么我不明白您的代码实际上做了什么,就像@Dilshod 所说,如果您发布它会很方便,或者至少链接到它的要点(http://www.gist .github.com)。