我有一个包含datagridview的winform。表单与数据完全断开。代码隐藏调用webservice,它返回一个表。该表成为datagridview的数据源。显示datagridview后,用户可以编辑他们想要的任何行。目前,当他们点击“更新”按钮时,网格中的每一行都会返回。
有没有办法只返回datagridview中更改的行?
更新:根据Tezzo的答案,我能够做到这一点:
var changedRows = ((DataTable)dataGridView1.DataSource).GetChanges(DataRowState.Modified).Rows;
答案 0 :(得分:3)
您可以DataTable
使用GetChanges
。{/ p> retrieve changes
因此,您可以将此代码与DataGridView
:
CType(YourDataGridView.DataSource, DataTable).GetChanges(DataRowState.Modified).Rows
答案 1 :(得分:0)
我在C#中提出了一个可行的解决方案,其中我考虑用户编辑当前单元格然后执行保存/更新而不移出已编辑的行。对GetChanges()
的调用由于其RowState
仍被标记为" Unchanged
"而无法识别当前编辑的行。我也打电话转到下一行,以防用户留在正在编辑的当前单元格,因为GetChange()
不会触及最后编辑的单元格。
//Move to previous cell of current edited row in case user did not move from last edited cell
dgvMyDataGridView.CurrentCell = dgvMyDataGridView.Rows[dgvMyDataGridView.CurrentCell.RowIndex].Cells[dgvMyDataGridView.CurrentCell.ColumnIndex - 1];
//Attempts to end the current edit of dgvMyDataGridView for row being edited
BindingContext[dgvMyDataGridView.DataSource, dgvMyDataGridView.DataMember.ToString()].EndCurrentEdit();
//Move to next row in case user did not move from last edited row
dgvMyDataGridView.CurrentCell = dgvMyDataGridView.Rows[dgvMyDataGridView.CurrentCell.RowIndex + 1].Cells[0];
//Get all row changes from embedded DataTable of DataGridView's DataSource
DataTable changedRows = ((DataTable)((BindingSource)dgvMyDataGridView.DataSource).DataSource).GetChanges();
foreach (DataRow row in changedRows.Rows)
{
//row["columnName"].ToString();
//row[0].ToString();
//row[1].ToString();
}