【发布时间】:2015-01-03 03:08:05
【问题描述】:
我使用包含纯文本的 DataTable 填充了 DataGridView。后来,我使用以下方法设置特定单元格的背景颜色:
grid.Rows[row].Cells[col].Style.BackColor = setColor;
这工作正常,直到我单击 DataGridView 中的列排序按钮。我想知道是否有办法在排序后保持背景颜色,而不考虑单元格的文本值。一旦我设置了该单元格的背景颜色,它就会在排序后记住该背景颜色。
我见过其他使用
的例子CellFormatting(object sender, System.Windows.Forms.DataGridViewCellFormattingEventArgs e)
事件处理程序,但他们在这里编写的代码似乎总是对单元格的背景与单元格的文本内容相关的颜色有一个先入为主的概念(例如:如果 cellText == "Critical" ...)。这在我的情况下不起作用,我只需要它记住哪些单元格设置为特定颜色。
有什么帮助吗?
【问题讨论】:
-
没有保持颜色。如果您需要维护某些东西(重新创建后存在),您将必须提供一种存储/恢复它的方法。以 每一行 的颜色列表为例,然后您可以将其用于单元格的格式设置或所有者绘图。
-
我不知道该怎么做...你能举个例子吗?有没有办法在处理程序中获取 DataGridView 单元格(e.RowIndex 和 e.ColumnIndex)并提取该单元格与原始 DataTable 关联的 rowIndex 和 colIndex?
-
您可以使用不可见(不显示)列来保存您需要的数据。在winforms中到处都有
Tag属性,专门用于保存自定义数据。 -
我尝试使用标签,但没有成功。所有标签都恢复为空。这是因为,正如你所说,细胞正在被重新创造吗? if(grid.Rows[e.RowIndex].Cells[e.ColumnIndex].Tag != null)
-
是的,你是对的,二维数组是行不通的。你需要一些key。然后,显然,颜色应该在
DataTable(作为不可见列)中定义,请参阅this 以隐藏列(我假设您的列是自动生成的,如果不是,那么不可见列很容易)。这个不可见的列就像TagforDataRow。
标签: c# winforms datagridview datatable