我想了解使用下面的方法創建的行之間的差異之間:差異DataTable.Add.Row(陣列)和DataTable.ImportRow(行)
newTable.Rows.Add(array);
newTable.ImportRow(row);
我有一個WinForms應用程序,它使用這兩種方法將行添加到DataTable。 現在,當我使用該DataTable作爲DataGridView的DataSource時,我可以看到使用這兩種方法創建的「全部」行。 然而,當我使用類型
foreach (DataRow row in newTable.Rows)
{
//...do work
}
的循環迴路只「看到」使用ImportRow方法創建的行。它好像使用Rows.Add(array)創建的行不存在,但顯然它們的確如此,因爲當我使用DataTable作爲它的DataSource時,我可以在DataGridView中看到它們。
EDIT(隨後由拉希爾一月穆罕默德評論)
是 - 大量的玩耍後,我覺得行添加的方法是什麼,用它做。問題出現在以下代碼中:
foreach (DataGridViewColumn col in dataAllocations.Columns)
{
if (col.Name == "Allocation")
{
col.ReadOnly = false;
}
else
{
col.ReadOnly = true;
}
}
foreach (DataGridViewRow row in dataAllocations.Rows)
{
MessageBox.Show("DataGrid, " + row.Cells["AllocID"].Value.ToString() +
", " + row.Cells["Active"].Value.ToString());
if (row.Cells["Active"].Value == null || (bool)row.Cells["Active"].Value == false)
{
row.ReadOnly = true;
}
else
{
row.ReadOnly = false;
}
}
第一個循環使除列「Allocation」之外的所有列爲只讀。如果列「Active」中的值爲false,則第二個循環用於使列「Allocation」爲只讀。然而,發生的事情恰恰相反。 Active爲true的行是隻讀的,反之亦然。所以是的,我的'if'聲明有問題。但是什麼?
請參閱下面的鏈接區別: http://stackoverflow.com/questions/5140158/difference-between-rows-add-and-importrow只要您的問題擔心,您不能訪問添加的行使用newTable.Rows.Add(數組)。請提供您的代碼,以便我們看看。 – 2012-08-17 01:33:11
我已經添加了更多代碼 - 謝謝。 – PJW 2012-08-17 01:37:50
在你的messagebox中嘗試添加Cells [「Active」]的值。我想這個IF條件有問題 – 2012-08-17 02:02:50