我有这个数据库,不是我设计的,但我必须使用它,其中包含一个如下表:
id | Name | status | ...
-----+------------+----------+------
1 | Product1 | 2 | ...
2 | Product2 | 2 | ...
3 | Product3 | 3 | ...
... | ... | ... | ...
status 属性指的是一个枚举,其中
0 = Invalid
1 = Dev
2 = Activ
3 = Old
当我在只读数据网格视图中显示此内容时,我希望用户看到枚举的名称(Dev、Activ...)或描述而不是数值。 datagridview 绑定到来自 DAL 的数据表,这又不是我的设计,因此我无法真正更改数据表。我发现如何做到这一点的唯一方法是监听 datagridview.CellFormating 事件,我在其中放置了以下代码:
private void dataGridView_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
if (e.ColumnIndex == 3) // column of the enum
{
try
{
e.Value = getEnumStringValue(e.Value);
}
catch (Exception ex)
{
e.Value = ex.Message;
}
}
}
这工作得很好,除了如果我有大约 1k(不是那么多)或更多的项目,它需要永远......
有一个更好的方法吗 ?
- -编辑 - -
这工作正常,但我的问题是,如果数据表中有超过 1000 行,则需要永远。问题是 CellFormating 事件会针对每一列触发,甚至是那些不需要它的列。假设我显示 15 列,有 1000 行,那么该事件会触发 15 000 次...
有没有比使用 CellFormatting 事件更好的方法?或者有没有一种方法可以将 CellFormatting 事件仅添加到一列?或者是什么 ?
我不会在 CellFormatting 上这样做。我会攻击数据表本身。我将添加一行具有枚举类型的行,然后循环遍历表并添加值。像这样的东西:
private void Transform(DataTable table)
{
table.Columns.Add("EnumValue", typeof(SomeEnum));
foreach (DataRow row in table.Rows)
{
int value = (int)row[1]; //int representation of enum
row[2] = (SomeEnum)value;
}
}
然后,在 DataGridView 中隐藏具有枚举整数表示形式的列。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)