Может ли FastMember.ObjectReader учитывать DisplayName?
Я использую FastMember.ObjectReader для копирования списка структур в DataTable, который я затем использую в качестве DataSource для gridview:
struct Foo {
[DisplayName("title1")]
public string Bar { get; set; }
}
...
var rows = new List<Foo>();
rows.Add(new Foo { Bar = "somethingsomething" });
DataTable table = new DataTable();
using (var reader = ObjectReader.Create(rows)) {
table.Load(reader);
}
grid.DataSource = table.DefaultView;
Если я выберу сам список в качестве источника данных, DisplayNames будут использоваться в качестве заголовков столбцов вместо имени члена структуры:
Как я могу восстановить это при использовании FastMember.ObjectReader?
1 ответ
О, я понимаю, что вы имеете в виду; ты хочешь IDataReader
разоблачить [DisplayName]
в метаданных; Тем не менее, основной путь, который подвергается через GetSchemaTable()
и AFAIK нет признанного ключа для представления [DisplayName]
, Было бы неверно называть это ИМО.
Выполнение быстрого теста:
var table = new DataTable();
table.Columns.Add("foo").Caption = "bar";
var schema = table.CreateDataReader().GetSchemaTable();
foreach(DataRow row in schema.Rows)
{
foreach(DataColumn col in schema.Columns)
{
Console.WriteLine($"{col.ColumnName}={row[col]}");
}
Console.WriteLine();
}
показывает, что действительно вряд ли этого ожидать
ColumnName=foo
ColumnOrdinal=0
ColumnSize=-1
NumericPrecision=
NumericScale=
DataType=System.String
ProviderType=
IsLong=False
AllowDBNull=True
IsReadOnly=False
IsRowVersion=False
IsUnique=False
IsKey=False
IsAutoIncrement=False
BaseCatalogName=
BaseSchemaName=
BaseTableName=
BaseColumnName=foo
AutoIncrementSeed=0
AutoIncrementStep=1
DefaultValue=
Expression=
ColumnMapping=1
BaseTableNamespace=
BaseColumnNamespace=
это означает, что на самом деле я ничего не могу предложить, кроме как вручную заполнить .Caption
, возможно, используйте fast-member для получения данных.