这是项目内的另一部分。
我们的想法是创建一个新表单,供用户在不改变数据库的情况下从文本框中搜索和编辑datagridview中的单元格值。
当用户搜索产品编号“111111”时(一个产品有多个ID)
txtNum: 111111 ⧈ (btnEdit)
_ _ _ _ _ _ _ _ _ _ _ _
| ID | pNum |
| 33 | 111111 |
| 2 | 111111 |
| 3 | 111111 |
| 4 | 111111 | <-- s_DataGridView
| 5 | 111111 |
| 22 | 111111 |
| 1 | 111111 |
| * | |
‾ ‾ ‾ ‾ ‾ ‾ ‾ ‾ ‾ ‾ ‾ ‾
通过在BindingSource中使用Filter方法并连接到数据集表中的数据。
// Load data to dataset(DataTable)
this.s_Adapter.Fill(this.dataDataSet.tblData);
// Use Filter to get pNum
if (pNum == "") {
s_BindingSource.Filter = "pNum IS NULL";
s_BindingSource.AddNew();
}
else {
txtNum.Text = pNum;
s_BindingSource.Filter = "pNum = '" + pNum + "'";
}
它正在进行搜索。 搜索代码(在KeyDown事件中检测按下的Enter键)以获取所有匹配的pNum并在s_DataGridView中显示它们:
s_BindingSource.Filter = "pNum = '" + pNum + "'";
但是编辑,它不能按预期工作。 这是一个编辑代码:
private void btnEdit_Click(object sender, EventArgs e) {
for (int i = 0; i < s_DataGridView.RowCount - 1; i++) {
s_DataGridView[1, i].Value = txtNum.Text;
}
}
得到结果:
txtNum: 222222 <-- insert NEW pNum IN textbox and click on edit button --> ⧈ (btnEdit)
_ _ _ _ _ _ _ _ _ _ _ _
| ID | pNum |
| 33 | 222222 | <-- just the first row has been changed
| 3 | 111111 |
| 5 | 111111 |
| 22 | 111111 |
| * | | <-- and some rows disappeared
‾ ‾ ‾ ‾ ‾ ‾ ‾ ‾ ‾ ‾ ‾ ‾
目标结果:
txtNum: 222222 ⧈ (btnEdit)
_ _ _ _ _ _ _ _ _ _ _ _
| ID | pNum |
| 33 | 222222 |
| 2 | 222222 |
| 3 | 222222 |
| 4 | 222222 | <-- all rows changed after clicking on edit button
| 5 | 222222 |
| 22 | 222222 |
| 1 | 222222 |
| * | |
‾ ‾ ‾ ‾ ‾ ‾ ‾ ‾ ‾ ‾ ‾ ‾
所以问题是:
1.为什么单元格值只改变了一行?
2.如何在不影响数据库的情况下从文本框中更改它们?
根据jdweng评论中的建议编辑答案: