如何在DataGridView中显示之前重新格式化/转换数据查询结果
本文关键字:格式化 转换 结果 数据查询 DataGridView 显示 | 更新日期: 2023-09-27 18:18:31
我使用DataGridView
组件快速方便地向用户显示只读SQL查询结果。我让它像我想的那样工作,但我不得不怀疑我是否在用"正确"的方式做事。毕竟这是一个复杂的组件,而且我对。net中的SQL访问和数据绑定完全是新手。
MSDN帮助建议使用BindingSource
对象作为中介,因此我提出了以下代码(似乎工作得很好):
mBindingSource.DataSource = null;
mBindingSource.Clear();
using (SqlDataReader query = GetQuery())
{
if ((query != null) && (query.HasRows))
{
mBindingSource.DataSource = query;
CDataGrid.DataSource = mBindingSource;
}
}
但是,我想重新格式化一些"原始"数据。例如,一些值在底层表中存储为int
或byte
类型,但它们实际上表示各种enum
值。目前,我正在使用以下代码来执行所需的转换(受此MSDN页面的启发):
private void CDataGrid_CellFormatting(object sender, DataGridViewCellFormattingEventArgs args)
{
DataGridViewColumn column = CDataGrid.Columns[args.ColumnIndex];
switch (column.Name)
{
case FieldNameProductID:
case FieldNameVersionID:
int? x = args.Value as int?;
ProductCode code = (ProductCode)(x ?? 0);
args.Value = code.ToString();
break;
case FieldNameProductType:
byte? y = args.Value as byte?;
ProductType type = (ProductType)(y ?? 0);
args.Value = type.ToString();
break;
}
}
这是正确的做法吗?我之所以问这个问题,是因为BindingSource
对象似乎部分地被设计为执行这种类型的转换。文档很难导航,但是,我还没有找到一个很好的例子,我正在尝试做什么。
这才是正确的做法。CellFormatting事件在数据呈现之前捕获数据,以便对其进行更改。