2016-08-11 16 views
0

私はobject[,] myObjを持っています。私もstring[] fieldTypesを持っています。自分のオブジェクト配列からDataTableにデータを取得したい。DataTable列を動的に指定する

正しいタイプ、すなわちstringdatetimeのようにかかわらず、私はfieldTypes配列の出番があるなどdouble、DataTableの列をしたい

だから、私は基本的な例から始めてみましょう:。

myObjは、n行と3列を持ちます。 fieldTypesはのは、言ってみましょう(myObjとしての列、すなわち同じ数)

長さ3の配列になります私の

fieldTypes = {'string', 'DateTime', 'double' } 

fieldTypesを使用して、正しい列を持っているセットアップまで私のDataTableに方法はありますか?以下のような

何かが

DateTable dt = new DataTable(); 
for(int i=0; i < fieldTypes.Length; i++) 
{ 
    dt.Columns.Add(myColName, typeof(fieldTypes[i])); 
} 

私はそのように彼らは私のDataTableに追加することができmyObjに値をキャストする必要があります(私は私が下記の書かれていることは間違っている知っています)。これは可能ですか?

答えて

0

カラム名とタイプを指定する必要があります。すでに型名を型にマップしていることを考えてください。

私のような列指定のクラスを使用したい:

class ColSpec 
{ 
    public Type Type { get; set; } 
    public string Name { get; set; } 
} 

、代わりに多次元1のジャグ配列を、あなたは簡単に行を追加することができます、何のキャストが必要ありません。

var colspecs = new ColSpec[] { 
    new ColSpec { Type = typeof(int), Name = "int" }, 
    new ColSpec { Type = typeof(string), Name = "string" } }; 
var dt = new DataTable(); 
dt.Columns.AddRange (colspecs.Select(x=> new DataColumn(x.Name, x.Type)).ToArray()) ; 
// single row jagged array 
object[][] myObj = new object[1][]; 
// 2 colums per row 
myObj[0] = new object[2] {100, "string"}; 
foreach (object[] objs in myObj) 
    dt.Rows.Add(objs); 
関連する問題