我不擅长编码,经过无数次的研究后,我无法理解这一点。
基本上我想要实现的是使用textBox更新特定单元格。我根据其他帖子编写了以下代码(注意:DataBinding是使用VS向导完成的):
int i;
private void textBox_TextChanged(object sender, EventArgs e)
{
i = dataGridView1.CurrentCell.RowIndex;
}
private void button1_Click(object sender, EventArgs e)
{
myDatabaseDataSet.Tables[0].Rows[i][5] = textBox.Text;
}
上面代码的问题在于,当我使用以下代码过滤dataGridView1时:
private void comboName_SelectedIndexChanged(object sender, EventArgs e)
{
DataTableCollection tables = myDatabaseDataSet.Tables;
DataView view1 = new DataView(tables[0]);
BindingSource source1 = new BindingSource();
source1.DataSource = view1;
dataGridView1.DataSource = source1;
source1.Filter = "Name='" + comboName.Text.Replace("'", "''") + "'";
}
代码将按预期更新dataGridView1.CurrentCell.RowIndex。这里的一个大问题是button1_Click下的代码没有看到过滤,因此它会在未过滤表的行[1]中而不是在过滤表的行[1]中写入 - 例如 - 。
非常感谢任何帮助。
答案 0 :(得分:0)
我不太明白你的问题
您是否意味着更改单元格文本时过滤器不适用?
尝试将其添加到按钮点击事件
(myDatabaseDataSet.DataSource as DataTable).DefaultView.RowFilter = "Name='" + comboName.Text.Replace("'", "''") + "'";
答案 1 :(得分:0)
根据您的代码,您可以创建原始表的副本。您不必更新已过滤的表,而是更新原始表myDatabaseDataSet.Tables[0].Rows[i][5] = textBox.Text;
。
修复很明显,我会在这里给你一些想法......
private void button1_Click(object sender, EventArgs e)
{
myDatabaseDataSet.Tables[0].Rows[i][5] = textBox.Text; // You need to modify this to know which is the correct row to update.
// Update the filtered table every time you update the main table.
DataTableCollection tables = myDatabaseDataSet.Tables;
DataView view1 = new DataView(tables[0]);
BindingSource source1 = new BindingSource();
source1.DataSource = view1;
dataGridView1.DataSource = source1;
source1.Filter = "Name='" + comboName.Text.Replace("'", "''") + "'";
}
祝你好运。
答案 2 :(得分:0)
首先,您必须找到一个独特的列,每列都是唯一的。 然后您可以根据以下内容选择数据集的dataRow:
int uniqueIDFromDatagrid = (int)dataGridView1.Rows[dataGridView1.CurrentCell.RowIndex].Cells[uniqueIdentifierColumn.Index].Value;
DataRow targetRow = myDataSet.Tables[0].Rows.OfType<DataRow>().First(x => (int)x["uniqueIdentifierColumn"]== uniqueIDFromDatagrid);
然后您可以像这样更新右侧行和列的源:
targetRow[5] = textBox1.Text;