2016-09-20 2 views
1

J'utilise FastMember.ObjectReader pour copier une liste de struct à un DataTable, que je puis utiliser comme source de données d'un gridview:Est-ce que FastMember.ObjectReader peut prendre en compte 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; 

Si je sélectionne la liste elle-même comme source de données, les displayNames sont utilisé comme titres de colonnes au lieu du nom du membre struct:

enter image description here

Comment puis-je recréent que lors de l'utilisation FastMember.ObjectReader?

Répondre

1

Oh, je vois ce que vous voulez dire; vous voulez que le IDataReader expose les [DisplayName] dans les métadonnées; Cependant, la principale façon exposée est via GetSchemaTable(), et AFAIK il n'y a pas de clé reconnue pour représenter [DisplayName]. Il serait incorrect de passer cela comme nom, IMO.

Exécution d'un test rapide:

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(); 
} 

montre qu'en effet, il est peu probable qu'il y attendre:

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= 

cela signifie qu'il n'y a pas vraiment tout ce que je peux suggérer autre que manuellement remplir le .Caption, peut-être utiliser fast-member pour obtenir les données.

+0

Une réponse de l'auteur lui-même pas moins! – sashoalm