How to retain column readonly state; if datagridview readonly state changes in c#
我正在开发Windows窗体应用程序,其中使用了datagridview。 它有一些列,其中ReadOnly为true,而另一些为ReadOnly为false。
在某个时候,我必须阻止用户编辑datagridview,但是仍然查看所有行,因此我将datagridview的ReadOnly属性设置为true。
当datagridview的readonly状态设置回false时,所有列的ReadOnly属性也将设置为false。
我无法禁用datagridview,因为在禁用状态下,用户无法查看所有行。
提前致谢。
我最初的想法是让您为每个
这使我想到了以下通用解决方案。 想法保持不变:每个
如果您的通用代码方法如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | public void DoStuff(DataGridView dgv) { if (dgv.ReadOnly) { dgv.ReadOnly = false; // Do related stuff. } else { dgv.ReadOnly = true; // Do other related stuff. } // Do common stuff. } |
进行以下更改以保存/加载
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | public void DoStuff(DataGridView dgv) { if (dgv.ReadOnly) { dgv.ReadOnly = false; // Load the saved ReadOnly columns. List<DataGridViewColumn> rocs = dgv.Tag as List<DataGridViewColumn>; if (rocs != null) { foreach (DataGridViewColumn roc in rocs) { roc.ReadOnly = true; } } // Do related stuff. } else { // Save the ReadOnly columns before the DGV ReadOnly changes. List<DataGridViewColumn> rocs = new List<DataGridViewColumn>(); foreach (DataGridViewColumn col in dgv.Columns) { if (col.ReadOnly) { rocs.Add(col); } } dgv.Tag = rocs; dgv.ReadOnly = true; // Do other related stuff. } // Do common stuff. } |
您不能仅通过设置
您可以先将ReadOnly列保存到List中并使用循环
1 2 3 4 | foreach(var column in dgv.Columns.Cast<DataGridViewColumn>().Where(i => !ReadOnlyColumnList.Contains(i))) { column.ReadOnly = false; } |