Я использую компонент DataGridView
для быстрого и удобного отображения результатов запросов SQL только для чтения. У меня это работает, как хотелось бы, но я должен задаться вопросом, правильно ли я делаю вещи. В конце концов, это сложный компонент, и я совершенно новичок в доступе к SQL и привязке данных в .NET.
В справке 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
предназначен частично для выполнения таких типов преобразований. Однако в документации трудно ориентироваться, и мне еще предстоит найти хороший пример того, что я пытаюсь сделать.