[英]how to update a ADO.NET DataRow in DataTable with another DataRow?
我想做这个:
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),然后也许迭代所有列并为其赋予新值。 请告诉我这不是真的!
尽管问题不是很清楚,但是听起来您有一个表中的一组行,并且想要更新另一个数据表中的等效行。 在这种情况下,您可以只使用find方法并按照您的建议手动更新它们,或者将新行添加到另一个表中并进行合并(存在用于合并两个数据表的各种选择)。 但是,合并将在后台执行相同的操作(即通过主键查找并更新列)。
另一种方法是仅替换行并将其状态设置为已修改的datarow.SetModified()
或者,您可以删除旧的并添加新的...
另一个选择是使用ItemArray属性更新DataRow实例。 唯一的事情是您仍然必须选择适当的行。 另外,请注意,必须更改整个ItemArray而不是其元素,才能使修改反映在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的方式如何,都可以将整个内容放入扩展方法中。
如果您的数据表相同,可以使用装箱操作吗?
DestDataset.DestDataTable newChildRecords =
(DestDataset.DestDataTable)_dataset.Tables[tableName].GetChanges(DataRowState.Added);
如果您正在使用dataAdapter ...
foreach (DataRow row in rows)
{
Row.BeginEdit();
//Do your stuff
Row.EndEdit();
}
dataAdapter.Update(_dataSet, "yourTable");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.