如何更改DataGridView列中的所有行?

时间:2017-11-11 10:21:19

标签: c# visual-studio-2013 datagridview filter bindingsource

这是项目内的另一部分。

我们的想法是创建一个新表单,供用户在不改变数据库的情况下从文本框中搜索和编辑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评论中的建议编辑答案:

  1. 因为DataGridView绑定到DataTable。
  2. DataGridView的单元格值在绑定到外包数据时无法直接更改,只需在DataTable中更改它,没关系,数据库将是安全的。这将在“按钮点击事件”中重新编码。由于有很多方法可以访问DataTable,我不会深入研究细节。无论如何,我在循环中使用了DataRow来完成所有工作。

0 个答案:

没有答案