2009-07-11 4 views
1

Mon problème donné est le suivant:Comment utiliser dataTable?

J'ai un objet avec x colonnes et chaque colonne a des valeurs y. Je dois maintenant apporter ceci dans Excel.

J'ai trouvé un extrait dans lequel une donnée peut facilement être exportée. Donc, je vais apporter mon objet à un datatable. Comment puis-je faire ceci?

Langue est C#

+0

Quelle langue de programmation? –

+0

C# .Net désolé .............. – Kovu

Répondre

4

Je ne suis pas complètement certain que je sais ce que vous essayez de faire. Je suppose que vous voulez créer un DataTable et charger votre objet existant dans celui-ci. En supposant que votre classe ressemble à ceci:

public class MyClass { 
    public int ID {get;set;} 
    public string Column1 {get;set;} 
    public DateTime Column2 {get;set;} 
    // ... 
} 

et en supposant que vous avez une liste d'entre eux vous souhaitez copier dans un DataTable, voici comment:

DataTable dt = new DataTable("MyTable"); 
dt.Columns.Add("ID", typeof(int)); 
dt.Columns.Add("Column1", typeof(string)); 
dt.Columns.Add("Column2", typeof(DateTime)); 

foreach (var o in _myObjectList) { 
    DataRow dr = dt.NewRow(); 
    dr["ID"] = o.ID; 
    dr["Column1"] = o.Column1; 
    dr["Column2"] = o.Column2; 
    dt.Rows.Add(dr); 
} 
+0

C'est un bon moyen, mais aussi exactement mon problème: Je ne connais pas les coloums au début. J'ai x objets. Et chaque objet a des valeurs y. Ainsi, par exemple. parfois j'ai 2 coloums avec 500 et 1000 valeurs, parfois j'ai 5 coloums dans lesquels chacun peut avoir son propre compte de valeur. – Kovu

+1

S'agit-il d'une exportation ponctuelle ou d'une feuille de calcul établie qui est diversifiée? Au lieu d'adresser par dr ["column1"] vous pouvez vous adresser par dr [0] et vous pouvez aussi foreach les colonnes qui sont disponibles. Si vous avez des modèles que vous pouvez exploiter dans Excel, je vous suggère de le faire. – Spence

+1

Si vous voulez que votre problème soit résolu, vous devrez le décrire. Modifiez votre question avec cette information et toute autre information nécessaire pour comprendre votre problème. –

1

Vous pouvez utiliser la réflexion pour obtenir les champs de l'objet et ajoutez les colonnes DataTable:

private bool IsNullableType(Type theType) 
{ 
    return (theType.IsGenericType && theType.GetGenericTypeDefinition().Equals(typeof(Nullable<>))); 
} 


// Create the columns based on the data in the album info - get by reflection 
var ai = new <your object without data>; 
Type t = ai.GetType(); 

this.dataTable.TableName = t.Name; 

foreach (PropertyInfo p in t.GetProperties()) 
{ 
    var columnSpec = new DataColumn(); 
    // If nullable get the underlying type 
    Type propertyType = p.PropertyType; 
    if (IsNullableType(propertyType)) 
    { 
     var nc = new NullableConverter(propertyType); 
     propertyType = nc.UnderlyingType; 
    } 
    columnSpec.DataType = propertyType; 
    columnSpec.ColumnName = p.Name; 
    this.dataTable.Columns.Add(columnSpec); 
} 

this.dataGridView.DataSource = dataTable; 

Ensuite, pour ajouter une ligne à la table:

var info = new <your object with data>; 
// Add by reflection 
Type t = info.GetType(); 
var row = new object[t.GetProperties().Length]; 

int index = 0; 
foreach (PropertyInfo p in t.GetProperties()) 
{ 
    row[index++] = p.GetValue(info, null); 
} 

this.dataTable.Rows.Add(row);