2017-10-13 37 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