首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FastMember.ObjectReader可以考虑DisplayName吗?

FastMember.ObjectReader可以考虑DisplayName吗?
EN

Stack Overflow用户
提问于 2016-09-20 22:34:33
回答 1查看 951关注 0票数 1

我使用FastMember.ObjectReader将结构列表复制到DataTable,然后将其用作网格视图的DataSource:

代码语言:javascript
复制
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;

如果我选择列表本身作为DataSource,则DisplayNames将用作列标题,而不是结构成员名称:

如何在使用FastMember.ObjectReader时重新创建它?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-20 23:14:00

哦,我明白你的意思了;你希望IDataReader在元数据中公开[DisplayName];然而,公开的主要方式是通过GetSchemaTable(),而AFAIK没有一个可识别的键来表示[DisplayName]。将其作为名称传递是不正确的,IMO。

运行快速测试:

代码语言:javascript
复制
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();
}

这表明它确实不太可能在那里实现:

代码语言:javascript
复制
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之外,我没有什么可以建议的,也许可以使用快速成员来获取数据。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39596930

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档