winforms 是否只返回数据网格视图中更改的行?

qyyhg6bp  于 2023-01-31  发布在  其他
关注(0)|答案(3)|浏览(156)

我有一个包含数据网格视图的winform。表单与数据完全断开。代码隐藏调用一个webservice,它返回一个表。该表成为数据网格视图的数据源。一旦数据网格视图显示,用户可以编辑任何行。目前,当他们点击“更新”按钮时,网格中的每一行都被返回。
是否有办法只返回DataGridView中更改的行?
更新:根据Tezzo下面的回答,我能够做到这一点:

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

kmbjn2e31#

您可以使用GetChangesDataTable中执行retrieve changes
因此,您可以将以下代码用于DataGridView

CType(YourDataGridView.DataSource, DataTable).GetChanges(DataRowState.Modified).Rows
yhxst69z

yhxst69z2#

我用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();
}
mzaanser

mzaanser3#

下面是使用C#获取DataGridView中已修改的所有行的简单方法:

DataRowCollection modifiedRows = ((DataTable)YourGridView.DataSource).GetChanges(DataRowState.Modified).Rows;

相关问题