仅返回datagridview的已更改行?

时间:2014-07-31 13:56:04

标签: c# winforms datagridview

我有一个包含datagridview的winform。表单与数据完全断开。代码隐藏调用webservice,它返回一个表。该表成为datagridview的数据源。显示datagridview后,用户可以编辑他们想要的任何行。目前,当他们点击“更新”按钮时,网格中的每一行都会返回。

有没有办法只返回datagridview中更改的行?

更新:根据Tezzo的答案,我能够做到这一点:

var changedRows = ((DataTable)dataGridView1.DataSource).GetChanges(DataRowState.Modified).Rows;

2 个答案:

答案 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();
}