我有一个数据集。我添加了一个列“标签”。我需要运行一个函数来为“Tags”列更新每个行的值。这是我到目前为止所尝试的,告诉我我错过了什么。
public System.Data.DataSet PopulateDataGrid(int nViewMode)
{
System.Data.DataSet ds = _data.GetGridView(nViewMode)
ds.Tables[0].Columns.Add("Tags", typeof(string));
foreach (System.Data.DataRow dr in ds.Tables[0].Rows)
{
dr.BeginEdit();
dr.ItemArray.SetValue(_dataFactory.GetPartTags(_dataFactory.ExecuteScalar("SELECT POSITION FROM PARTS WHERE PART_ID = " + dr.ItemArray.GetValue(0)).ToString()), dr.ItemArray.Length - 2);
dr.SetModified();
dr.EndEdit();
dr.AcceptChanges();
}
ds.AcceptChanges();
return ds;
}
是的,我知道我可以放using System.Data
并且不必将它放在我的代码中,但这是许多使用它的唯一功能,所以我不想这样做(如果加载时间没有损坏,我可能)。我希望我只需要运行一个查询,就是这样,但这需要填写代码。如果有人可以提供帮助,那就太好了。感谢。
编辑:我还确认_dataFactory.GetPartTags(_dataFactory.ExecuteScalar("SELECT POSITION FROM PARTS WHERE PART_ID = " + dr.ItemArray.GetValue(0)).ToString())
会返回我想要的值。它只是在DataGridView中显示为空白。列就在那里,但没有填充任何内容。
答案 0 :(得分:2)
你应该可以使用:
dr["Tags"] = _dataFactory.GetPartTags(_dataFactory.ExecuteScalar("SELECT POSITION FROM PARTS WHERE PART_ID = " + dr.ItemArray.GetValue(0)).ToString())
您应该注意SetModified()
方法将行标记为已修改,AcceptChanges()
清除已修改/新建/已删除标记。除非你有底层代码在某处存储数据或者自动执行更多操作,否则它有点多余。与ds.AcceptChanges()
相同。如果您稍后在修改/新行上使用适配器在行/数据集上完成AcceptChanges()
后将它们推送到数据库,则它们将不会被发现为已修改/新/删除,并且不会将更改推送到数据库。