2017-10-13 6 views
0

foreachループ内のDataTableに列を自動的に追加する方法があるかどうかを知りたいですか?それは私が "自動的に"意味するものです。明示的に各ループの前に、すべての列に名前を付けるよりも、ループ内のDataTableに列を追加する

DataTable dt = new DataTable(); 

foreach (var item in model.Statistik) 
{ 
    dt.Columns.Add(); 
    row = dt.NewRow(); 
    row[//Name of column goes here] = // either item or item.property; 
    dt.Rows.Add(row); 
} 

これは、はるかに効率的である:

私はこのような心の何かに持っていました。何らかのプロパティーが変更されたり削除されたりするとどうなりますか?したがって、これは私が取り除きたいものです。

+0

Watさんは 'row [" ColumnName "] = value'を使用できないようにしますか?あなたは 'item'のプロパティを知らないのですか?どのようなタイプですか、あなたはそれを見せますか? –

+0

私は私のViewModelのプロパティを知っていますが、私はそれを多く簡略化したいと思います。私は多くのプロパティで作業していると思うので、効率的ではありませんか?各プロパティのDisplayName属性を取得してループコードの列に追加して、ループ内の次の行に一致するようにしました。したがって、VMに文字列型のプロパティがある場合、カラムにアイテムの属性名が渡され、カラムに追加できます。なぜなら、アイテムのレコードと一致する列を追加する必要があるからです。 – kryman

+0

これは私が考えたことです: dt.Columns.Add(prop。の属性名はここに入ります); 行= dt.NewRow(); 行[attr。小道具の名前。ここに行く] = // itemまたはitem.property; このように、ループの外側にある新しい列を指定する必要はなく、行の列の名前も指定する必要もありません。 – kryman

答えて

0

dt.Columnsdt.Rowsがどのように関連しているかわかりません。 DataTableにはColumnのセットが1つあります。 DataTableのには一致するすべての列があります。にはそれぞれColumnがありません。したがって、毎回dt.Columns.Addを実行するたびに、古いものか新しいものかをすべてに追加しています。また

、どのようにあなたがDataTableに名前を指定しない場合は、列> ]Row[ <名前が動作するように期待していますか?

+0

私が望むのは、ループ内で自動的に 'DataTable'に列と行を追加することです。 'dt.Columns.Add(" First Name ");'と 'dt.Rows.Add(model.FirstName);を使用するのが通常の手順であると信じています。それらのすべてを指定することは迷惑になる可能性があります。では、これをすべて自動化する方法はありますか?その 'model.Statistik'はViewModel型のリストです。しかし、奇妙なのは、上記の例のように、このプロパティを 'DataTable'に直接追加すると、リストから指定されたプロパティだけでなく、VMからすべてのプロパティを取得できます。 – kryman

関連する問題