首页 文章

如何使用另一个DataRow更新DataTable中的ADO.NET DataRow?

提问于
浏览
0

我想做这个:

public void UpdateDataRowsToDataTable(string tableName, List<DataRow> rows)
    {
        foreach (DataRow row in rows)
        {
            // this method does not exist!!
            _dataSet.Tables[tableName].Rows.Update(row);
        }
    }

我需要一个方法来查找一行(可能是主键)并将更改的行更新为DataTable中的行 .

我所知道的唯一可能是使用Select(或Find),然后迭代所有列并为它们赋予新值 . 请告诉我,这不可能是真的!

5 回答

  • 0

    虽然问题不是很清楚,但听起来你有一组来自一个表的行,并希望更新另一个数据表中的等效行 . 如果是这种情况,您可以使用find方法并按照建议手动更新它们,或者将新行添加到另一个表并合并它们(有两种选项可用于合并两个数据表) . 然而,合并只会在引擎盖下做同样的事情(即通过主键查找并更新列) .

    另一种方法是只替换行并将其状态设置为修改 datarow.SetModified()

  • 0

    或者您可以删除旧的并添加新的...

  • 0

    如果你的数据表是相同的,你可以使用拳击来做到这一点 .

    DestDataset.DestDataTable newChildRecords = 
     (DestDataset.DestDataTable)_dataset.Tables[tableName].GetChanges(DataRowState.Added);
    
  • 1

    另一种选择是使用ItemArray属性来更新DataRow实例 . 唯一的问题是你仍然需要选择合适的行 . 此外,请注意您必须更改整个ItemArray而不是其元素才能拥有modification reflected in the DataTable .

    foreach (DataRow row in rows)
    {
       // Select the row
       var rows = _dataSet.Tables[tableName].Select(string.Format("Table_ID = {0}", row["Table_ID"]));
    
       // Update the row
       if (0 < rows.Length)
           rows[0].ItemArray = (object[])row.ItemArray.Clone();
    }
    

    无论您选择更新DataRow的方式如何,您都可以将整个内容放在扩展方法中 .

  • 3

    如果您使用的是dataAdapter ...

    foreach (DataRow row in rows)
    {
        Row.BeginEdit();        
        //Do your stuff        
        Row.EndEdit();
    }
    dataAdapter.Update(_dataSet, "yourTable");
    

相关问题