以下是我的库存表中更新记录的代码(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.");
我认为我的代码中缺少某些内容,任何帮助都会受到赞赏。感谢。
答案 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.");