如何更改数据集中“单元格”的值?

时间:2010-09-17 16:44:15

标签: c# visual-studio-2008 dataset

我有一个数据集。我添加了一个列“标签”。我需要运行一个函数来为“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中显示为空白。列就在那里,但没有填充任何内容。

1 个答案:

答案 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()后将它们推送到数据库,则它们将不会被发现为已修改/新/删除,并且不会将更改推送到数据库。