代码之家  ›  专栏  ›  技术社区  ›  XstreamINsanity

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

  •  0
  • XstreamINsanity  · 技术社区  · 16 年前

    我有一个数据集。我添加了一个列“标签”。我需要运行一个函数来更新“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 回复  |  直到 16 年前
        1
  •  2
  •   Nathan Wheeler    16 年前

    您应该能够使用:

    dr["Tags"] = _dataFactory.GetPartTags(_dataFactory.ExecuteScalar("SELECT POSITION FROM PARTS WHERE PART_ID = " + dr.ItemArray.GetValue(0)).ToString())
    

    你应该注意到 SetModified() AcceptChanges() 清除已修改/新建/删除的标志。除非您有底层代码将数据存储在某个地方或自动对其执行更多操作,否则这是有点多余的。同样的事情 ds.AcceptChanges() . 如果您稍后尝试在修改/新行上使用适配器,在完成一个 接受更改()