我想这样做:
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),然后迭代所有列并为它们赋予新值。请告诉我这不可能是真的!
答案 0 :(得分:3)
虽然问题不是很清楚,但听起来你有一组来自一个表的行并希望更新另一个数据表中的等效行。如果是这种情况,您可以使用find方法并按照建议手动更新它们,或者将新行添加到另一个表并合并它们(有两种选项可用于合并两个数据表)。然而,合并只会在引擎盖下做同样的事情(即通过主键查找并更新列)。
另一种方法是只替换行并将其状态设置为修改后的datarow.SetModified()
答案 1 :(得分:1)
或者您可以删除旧的并添加新的...
答案 2 :(得分:0)
如果你的数据表是相同的,你可以使用装箱吗?
DestDataset.DestDataTable newChildRecords =
(DestDataset.DestDataTable)_dataset.Tables[tableName].GetChanges(DataRowState.Added);
答案 3 :(得分:0)
如果您使用的是dataAdapter ...
foreach (DataRow row in rows)
{
Row.BeginEdit();
//Do your stuff
Row.EndEdit();
}
dataAdapter.Update(_dataSet, "yourTable");
答案 4 :(得分:0)
另一种选择是使用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的方式如何,您都可以将整个内容放在扩展方法中。