![](/img/trans.png)
[英]When Adding or removing rows with TemplateField in asp.net the datatable is empty
[英]Adding empty rows to a DataTable
是否可以通過一次調用向 DataTable 添加幾行?
問題是我需要創建一個 DataTable,其中每一列在寫入 DataTable 之前都需要預先處理。 逐行寫入會很不方便。
即,我需要創建一個包含 N 個空行的 DataTable,然后在列的基礎上寫入值。
您不能在沒有循環的情況下添加多行。 如果要將n
行添加到所有列都為“空”的DataTable
,請使用不帶參數的DataRowCollection.Add
:
for(int i = 0; i < n; i++)
table.Rows.Add(); // all fields get their default value
在你的 for 循環中,(顯然需要一個 forloop 來添加多行),你想使用
DataRow newBlankRow = theDataTable.NewRow();
theDataTable.Rows.InsertAt(newBlankRow, theDataTable.Rows.Count);
對於有很多行的表格,更好的解決方案是使用“表格預制件”。 讓我們看一個例子。 我們需要更新目標 (DST) 表的 100k 行。 我們有外部源 (SRC) 表。 我們知道 SRC 中的某些行可能不存在,這意味着該特定行的列是 DBNULL。 如果我們只是將 SRC 合並到 DST,舊數據仍將在 DST 中。 因此,為了清除該數據,我們首先需要清除將從 SRC 導入數據的列中的所有數據,並保存另一個數據(實際上是從另一個源表中獲取的)。
不推薦使用“For...Next” - 花費太多時間。 我接下來做:
這是VB中的代碼:
Dim tmp As DataTable = New DataTable
Dim pk(dst.PrimaryKey.Length - 1) As DataColumn
For Each col As DataColumn In dst.PrimaryKey
pk(j) = tmp.Columns.Add(col.ColumnName, col.DataType)
j += 1
Next
tmp.PrimaryKey = pk
tmp.Merge(src, False, MissingSchemaAction.Ignore) 'add rows
For Each col As DataColumn In src.Columns 'add empty columns
If dst.Columns.Contains(col.ColumnName) _
AndAlso Not tmp.Columns.Contains(col.ColumnName) _
Then tmp.Columns.Add(col.ColumnName, col.DataType)
Next
dst.Merge(tmp, True, MissingSchemaAction.Ignore) 'clear destination columns
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.