将列添加到循环内的DataTable中
我想知道是否有方法在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);
}
这是更有效的比以前的每个循环显式指定每一列。因为,如果某些属性发生更改或被删除等情况会发生什么?因此,这是我希望摆脱的东西。
我不认为你明白如何dt.Columns
和dt.Rows
是相关的。 DataTable
有一组Column
。 DataTable
中的每个都具有所有匹配列 - 您在每个中都没有唯一的Column
s。所以每次你做dt.Columns.Add
你都要给每个添加一个新的或新的列。
而且,你怎么能指望>列]
的Row[
<名字,如果没有指定名称的DataTable
工作?
我想要的是在循环内自动添加列和行到“DataTable”中。我相信,正常的过程是,使用'dt.Columns.Add(“First Name”);''和'dt.Rows.Add(model.FirstName);',如果我有很多列,我会有指定每一个,这可能是烦人的。那么有没有办法将所有这些自动化?因为那个'model.Statistik'是一个ViewModel类型的列表。但奇怪的是,当我直接将此属性添加到“DataTable”时,按照上面的示例,我从VM获取所有属性,而不仅仅是列表中指定的属性。 – kryman
Wat避免使用'row [“ColumnName”] = value'?你不知道'item'的属性?它是什么类型,你可以展示它吗? –
我知道我的ViewModel的属性,但我想简化它很多。想想我是否与很多物业合作,因此它效率不高?我想到了每个属性的DisplayName属性,然后将其添加到循环代码中的列中,以便它与循环中下一行的项目匹配。所以,如果我的虚拟机中有一个字符串类型的属性,那么该列将接收该项目的属性名称,以便将其添加到列中。因为,我认为你需要添加一个匹配项目记录的列。 – kryman
这是我想到的: dt.Columns.Add(属性名称的prop。去这里); row = dt.NewRow(); row [attr。道具名称。去这里] = //任何项目或item.property; 以这种方式,我不需要每次指定循环外的新列,也不需要在行中指定列的名称。 – kryman