只有第一行datagridview更新c#

时间:2011-10-31 03:37:03

标签: c# record

以下是我的库存表中更新记录的代码(ItemID设置为主键)。代码正常工作,但它只更新datagridview中的第一行。

现在,当我尝试更新其他记录时(第1行除外),我收到此错误消息:“列'ItemID'被限制为唯一。值'2'已经存在。”但是当我更新第一行(即'1')时,即使值'1'已经存在,它也会成功更新。

cb = new SqlCommandBuilder(da);

ds.Tables["Inventory"].Rows[0]["ItemID"] = txtID.Text;
ds.Tables["Inventory"].Rows[0]["ItemCode"] = txtCode.Text;
ds.Tables["Inventory"].Rows[0]["Description"] = txtDesc.Text;

da.Update(ds, "Inventory");
ds.Tables["Inventory"].AcceptChanges();
MessageBox.Show("Record updated successfully.");

我认为我的代码中缺少某些内容,任何帮助都会受到赞赏。感谢。

1 个答案:

答案 0 :(得分:1)

您不应该在DS中找到与输入的ID匹配的行,而不是将DS中第一行的ItemID设置为文本值。我的猜测是当你更新任何其他行时,除了你的DS最终使用相同的ID两次。

在您更新之前:

Row    ItemId
-----  ------
0      1
1      2
2      3

更新itemid 3之后:

Row    ItemId
-----  ------
0      3 <-- row 0 now contains id 3 which is a duplicate of row 2
1      2
2      3

我认为行更新代码看起来像这样:

cb = new SqlCommandBuilder(da);

var itemId = int.Parse(txtID.Text);
var row = ds.Tables["Inventory"].Rows.Find(itemId);
row["ItemCode"] = txtId.Text;
row["Description"] = txtId.Text;

da.Update(ds, "Inventory");
ds.Tables["Inventory"].AcceptChanges();
MessageBox.Show("Record updated successfully.");