28

我创建了一个数据表。它有 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。

4

7 回答 7

80

首先,您需要找到 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
}
于 2013-10-28T08:14:30.343 回答
19

您可以找到该行

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

并更新它

row["Product_name"] = "cde";
于 2013-10-28T08:35:08.453 回答
9

尝试SetField方法:

通过传递列对象:

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

通过传递列索引:

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

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

table.Rows[rowIndex].SetField("product_name" /*columnName*/, value);
于 2017-01-24T12:09:32.847 回答
7

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

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

然后遍历子集并更新

    foreach (DataRow row in selected)
    {
        row["Product_price"] = "<new price>";
    }
于 2016-09-29T10:12:11.500 回答
2

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

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

或者

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

希望这可以帮助

于 2013-10-28T08:16:03.560 回答
2

试试这个我也不是 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";
           }
        }
于 2013-10-28T08:18:37.563 回答
0

试试这个,

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

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

于 2021-08-11T07:46:58.480 回答