只有第一行的datagridview更新c#
本文关键字:一行 datagridview 更新 | 更新日期: 2023-09-27 18:12:54
下面是更新库存表中记录的代码(ItemID设置为主键)。代码可以正常工作,但是,它只更新datagridview中的第一行。
现在,当我试图更新其他记录(除了第一行)时,我得到这个错误消息:"列'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.");
我认为我的代码中缺少一些东西,任何帮助都会很感激。谢谢。
与其将DS第一行的ItemID设置为文本值,还不如在DS中查找与输入的ID匹配的行。我的猜测是,当您更新除第一行之外的任何其他行时,您的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.");