2013-09-25 52 views
1

我有這樣的代碼:從DataTable.Select()向DataTable添加行 - 列計數不匹配?

DataTable dtLevel1 = dtCategories.Clone(); 
DataTable dtLevel2 = dtCategories.Clone(); 

// i can workaround this with CopyToDataTable() 
dtLevel1.Rows.Add(dtCategories.Select("id = 123")); // error 


// but here similar situation, I cant use CopyToDataTable() method here 
// because it will overwrite whole table in next loop run 
foreach (DataRow dr in dtLevel1.Rows) 
{ 
    dtLevel2.Rows.Add(dtCategories.Select("[pid] = " + dr["id"].ToString())); 
} 

在最後一行我收到提示,上面寫着:

輸入數組的長度超過列在該表中的數字。

爲什麼?

編輯/後來補充:

如何解決呢?

回答

1

dtCategories.Select("id = 123")返回一個DataRow數組,滿足您的選擇條件,比如說5行。

得到object[]的dtLevel1.Rows.Add的重載實際上得到了一個列值的數組,換句話說,它期望連續。你的代碼搞亂了一行數組。

+0

我修正了你的格式。好吧,現在我明白了什麼是錯的。如何解決它? – Kamil

+1

@Kamil循環通過'dt.Categories.Select'將每一行添加到您的'dtLevel1.Rows' –

+0

@KingKing我不喜歡那樣。沒有其他辦法了? – Kamil

1

如下我會解決這個問題:

foreach (var row in dtCategories.Select("id = 123")) 
    { 
     dtLevel1.ImportRow(row); 
    } 

的問題是,你試圖通過行的陣列添加()。 Add()需要包含列的單個行或對象數組。您應該遍歷返回的結果並使用ImportRow方法來保留任何屬性設置。

+0

我的列定義是從源表中複製的。我需要'.ImportRow()'方法嗎? – Kamil

相關問題