2017-10-13 67 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属性,然后将其添加到循环代码中的列中,以便它与循环中下一行的项目匹配。所以,如果我的虚拟机中有一个字符串类型的属性,那么该列将接收该项目的属性名称,以便将其添加到列中。因为,我认为你需要添加一个匹配项目记录的列。 – kryman

+0

这是我想到的: dt.Columns.Add(属性名称的prop。去这里); row = dt.NewRow(); row [attr。道具名称。去这里] = //任何项目或item.property; 以这种方式,我不需要每次指定循环外的新列,也不需要在行中指定列的名称。 – kryman

回答

0

我不认为你明白如何dt.Columnsdt.Rows是相关的。 DataTable有一组ColumnDataTable中的每个都具有所有匹配列 - 您在每个中都没有唯一的Column s。所以每次你做dt.Columns.Add你都要给每个添加一个新的或新的列。

而且,你怎么能指望>列]Row[ <名字,如果没有指定名称的DataTable工作?

+0

我想要的是在循环内自动添加列和行到“DataTable”中。我相信,正常的过程是,使用'dt.Columns.Add(“First Name”);''和'dt.Rows.Add(model.FirstName);',如果我有很多列,我会有指定每一个,这可能是烦人的。那么有没有办法将所有这些自动化?因为那个'model.Statistik'是一个ViewModel类型的列表。但奇怪的是,当我直接将此属性添加到“DataTable”时,按照上面的示例,我从VM获取所有属性,而不仅仅是列表中指定的属性。 – kryman