【问题标题】:How to Edit a row in the datatable如何编辑数据表中的一行
【发布时间】:2013-11-06 22:06:32
【问题描述】:

我已经创建了一个数据表。它有 3 列 Product_idProduct_nameProduct_price

    Datatable table= new DataTable("Product");

    table.Columns.Add("Product_id", typeof(int));
    table.Columns.Add("Product_name", typeof(string));
    table.Columns.Add("Product_price", typeof(string));

    table.Rows.Add(1, "abc", "100");
    table.Rows.Add(2, "xyz", "200");

现在我想按索引查找并更新该行。

例如说

我想将 Product_name 列的值更改为具有 Product_id 列值的“cde”:2。

【问题讨论】:

  • 请编辑您的问题以包含您迄今为止尝试过的代码。谢谢。

标签: c# datatable


【解决方案1】:

首先您需要找到 id == 2 的行,然后更改名称:

foreach(DataRow dr in table.Rows) // search whole table
{
    if(dr["Product_id"] == 2) // if id==2
    {
        dr["Product_name"] = "cde"; //change the name
        //break; break or not depending on you
    }
}

您也可以尝试以下解决方案:

table.Rows[1]["Product_name"] = "cde" // not recommended as it selects 2nd row as I know that it has id 2

或者:

DataRow dr = table.Select("Product_id=2").FirstOrDefault(); // finds all rows with id==2 and selects first or null if haven't found any
if(dr != null)
{
    dr["Product_name"] = "cde"; //changes the Product_name
}

【讨论】:

  • 我喜欢“在 DataTable 上选择”方法,因为循环通过几千行会更慢。我还研究了“FirstOrDefault()”方法。如果您正在查询 ID 字段,您很可能会寻找单行。添加 'FirstOrDefault()' 方法是否比仅选择没有它更快?
  • 只是想我会提到表格示例中的“选择”中缺少方括号。它应该是DataRow[] dr =
【解决方案2】:

你可以找到那一行

DataRow row = table.Select("Product_id=2").FirstOrDefault();

并更新它

row["Product_name"] = "cde";

【讨论】:

  • 虽然这适用于 OP 问题,但请注意,如果选择返回多条记录,此解决方案只会更新第一条记录。
  • 这个解决方案效果很好,正如 AaA 所说,它只适用于第一个结果,但是如果您正在寻找数据表上的唯一值,那么这应该可以按预期工作
【解决方案3】:

试试 SetField 方法:

通过传递列对象:

table.Rows[rowIndex].SetField(column, value);

通过列索引:

table.Rows[rowIndex].SetField(0 /*column index*/, value);

通过将列名作为字符串传递:

table.Rows[rowIndex].SetField("product_name" /*columnName*/, value);

【讨论】:

    【解决方案4】:

    如果您的数据集太大,请先通过 Select() 选择所需的行。它将停止进一步循环。

    DataRow[] selected = table.Select("Product_id = 2")
    

    然后循环遍历子集并更新

        foreach (DataRow row in selected)
        {
            row["Product_price"] = "<new price>";
        }
    

    【讨论】:

      【解决方案5】:

      您可以像下面这样遍历DataTable并设置值

      foreach(DataTable thisTable in dataSet.Tables)
      {
          foreach(DataRow row in thisTable.Rows)
          {
              row["Product_name"] = "cde";
          }
      }
      

      thisTable.Rows[1]["Product_name"] = "cde";
      

      希望对你有帮助

      【讨论】:

      • 是的,我们可以添加一个条件来验证数据,然后才更新...虽然第二种方法对特定行执行此操作
      【解决方案6】:

      试试这个我也不是 100% 确定

              for( int i = 0 ;i< dt.Rows.Count; i++)
              {
                 If(dt.Rows[i].Product_id == 2)
                 {
                    dt.Rows[i].Columns["Product_name"].ColumnName = "cde";
                 }
              }
      

      【讨论】:

        【解决方案7】:

        试试这个,

        foreach(DataRow rw in dt.Rows)
        {
        rw["Obj_Amt"] = h.Decrypt(rw["Obj_Amt"].ToString());
        dt.AcceptChanges();
        rw.SetModified();
        }
        

        使用 SetModified() 方法更新数据表值。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-08-29
          • 2013-10-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-10-27
          相关资源
          最近更新 更多