InsertAt()方法后缺少DataRow值

时间:2014-02-03 13:35:08

标签: c# asp.net datatable datarow

我有一个示例代码如下所示。

DataRow dr = DTSource.Rows[rowIndex]; //getting specified index row
DTSource.Rows.RemoveAt(rowIndex); // deleting specified row
DTSource.Rows.InsertAt(dr, rowIndex - 1); // adding the row placed just above of the deleted row

此处,在将特定行插入指定索引之后,数据表在最近插入的位置显示空行。如何添加包含数据的行而不是此空行?

3 个答案:

答案 0 :(得分:1)

基于Mnieto和Tim Schmelter Answers,我已经改变了我的代码。

 DataRow dr = DTSource.NewRow();
                for (int i = 0; i < DTSource.Columns.Count; i++)                    
                    dr[i] = DTSource.Rows[rowIndex][i];

现在它正在为我工​​作。

答案 1 :(得分:0)

dr已删除。那是因为数据表显示一个空行。让我们一步一步看:

DataRow dr = DTSource.Rows[rowIndex];

在dr变量

中保存一行
DTSource.Rows.RemoveAt(rowIndex);

您删除该行。 dr变量现在指向已删除的行。

DTSource.Rows.InsertAt(dr, rowIndex - 1);

您正在将已删除的行插入另一个位置

如果要移动行位置,则应该对数据行进行深层复制。

答案 2 :(得分:0)

查看RemoveAt的文档:

  

从集合中删除指定索引处的行。   删除行后,该行中的所有数据都将丢失。 ...

因此,您需要暂时保留数据,例如使用row.ItemArray

DataRow row = DTSource.Rows[rowIndex];         //getting specified index row
var data = row.ItemArray;                      // all fields of that row
DTSource.Rows.RemoveAt(rowIndex);              // removes row and it's data 
row.ItemArray = data;                          // reassign data
DTSource.Rows.InsertAt(row, rowIndex - 1);     // adding the row placed just above of