3

我有一个datagridview显示一些数据。数据之间的某些行是separator rows这样的readonly。在某些情况下,整体datagridview可能是readonly. 但是当我将它切换回时readonly = false,所有行都是可编辑的。是否有可能不必readonly手动重新设置每一行的属性,我的行会像以前一样返回?

4

3 回答 3

4

据我所见,使用反射器,设置DataGridView.ReadOnlytrue也将设置ReadOnlyfalse网格中的所有行和列 - 大概假设您以后永远不会再设置DataGridView.ReadOnlyfalse

所以我能看到你解决这个问题的唯一方法是“记住”哪些行应该是只读的,例如通过在 中设置一个合适的值,然后使用它来手动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.ReadOnlytrue

例如,如果您想阻止用户通过双击单元格进行编辑,您可以设置DataGridView.EditModeDataGridViewEditMode.EditProgramatically而不是设置DataGridView.ReadOnlytrue

于 2013-03-20T11:40:46.207 回答
0

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

像这样:

string _myProperty;
public string MyProperty
{
   get{return _myProperty;}
}
于 2013-03-19T20:09:23.277 回答
0

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

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

于 2013-03-19T20:35:22.120 回答