2016-09-20 8 views
1

私はその後、GridViewコントロールのデータソースとして使用され、データテーブルに構造体のリストをコピーするFastMember.ObjectReaderを使用しています:FastMember.ObjectReaderはDisplayNameを考慮に入れることができますか?

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を使用するときにことを再作成することができますどのように

enter image description here

:カラムタイトルの代わりに、構造体のメンバ名として使用?

答えて

1

ああ、私はあなたが何を意味するのか見ています。 IDataReader[DisplayName]をメタデータに公開します。しかし、露出される主な方法はGetSchemaTable()経由であり、AFAIKは[DisplayName]を表す認識されたキーがありません。それを名前として渡すのは間違いでしょう、IMO。簡単なテスト実行

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を使用してデータを取得します。

+0

著者自身からの回答はそれほどありません! – sashoalm

関連する問題