【问题标题】:Editable cells in ReadOnly Columns DataGridView只读列 DataGridView 中的可编辑单元格
【发布时间】:2013-02-26 21:58:14
【问题描述】:

我有一个从数据库中的数据填充的 DataGridView,但不是使用 DataSource。我从我的数据库中得到一行,并在初始化时向我的 DataGridView 添加一行。

我的问题是,我有一列是只读的,但有时,该列的数据库中没有数据,在这种情况下,我希望用户能够添加它,但不覆盖数据,如果信息来自数据库。

如何使列中的单个单元格可编辑,而不是列?

I.E.允许这个---

            Col1        Col2 (ReadOnly)                    Col1       Col2 (ReadOlny)
 Row1       A           Can't Change      -->   Row1       J          Can't Change
 Row2       B                                   Row2       B          I added this!
 Row3       C           No Change               Row3       T          No Change

但不是这个---

            Col1        Col2 (ReadOnly)                    Col1       Col2 (ReadOlny)
 Row1       A           Can't Change      -->   Row1       J          OOPS!  
 Row2       B                                   Row2       B          I added this!
 Row3       C           No Change               Row3       T          Not allowed!

【问题讨论】:

  • 如果单元格为空或为空,最好将单元格的 ReadOnly 属性设置为 false,最好在将行插入网格时设置。如果列的 ReadOnly 状态覆盖单元格,也将其更改为 false,并让单元格驱动它自己的编辑能力,而不是在整个列上一概而论。

标签: c# winforms datagridview


【解决方案1】:

也许您需要创建一个只读列的错觉。

您可以简单地将列中的每个单元格修改为只读,其中单元格值不等于 null 或 String.Empty,而不是将列设置为只读。这将允许用户编辑那些空白的单元格并保护您的数据。

只需遍历 DataGridViewRow 的:-

Foreach(DataGridViewRow row in DataGridView1.Rows)
{
   If(!row.Cells[2].Value.Equals(null) || !row.Cells[2].Value.Equals(String.Empty))
     {
        row.Cells[2].ReadOnly = true;
     }
}

请原谅任何语法问题,我已经完成了这件事。

【讨论】:

  • ReadOnly 列上未触发 EditingControlShowing 事件:/
  • 解决方案是保持列 readOnly = false 并单独修改单元格。使列中的一个单元格具有下拉列表或其他任何内容也是如此:) 谢谢!
猜你喜欢
  • 2010-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-06
  • 2015-01-11
  • 2021-11-15
相关资源
最近更新 更多