我开始使用某些Data Bound DataGridView,但是我不喜欢保存时要做的事情。
foreach (DataGridViewRow dgvr in dgvWorkcenters.Rows)
{
if (dgvr.DataBoundItem != null)
{
DataRow dr = ((DataRowView)dgvr.DataBoundItem).Row;
if (dr.RowState == DataRowState.Added || dr.RowState == DataRowState.Modified)
{
cOM_PROCCESS_CONTROL_WORKCENTERSTableAdapter.Update(dr);
}
}
}
IMO,不是更新已添加或已修改行的最有效方法。我想使用LINQ来做到这一点,但是我陷入了DataGridView数据源的问题。由于我为DataGridView使用BindingSource,因此DataSource不再具有“ Enumerable”。 这是我尝试过的:
var dt = ((DataTable)dgvWorkcenters.DataSource).AsEnumerable().Where
(r => r.RowState == DataRowState.Added || r.RowState == DataRowState.Modified).CopyToDataTable();
由于我的数据源是BindingSource,所以.NET不允许我将其强制转换为数据表。
如何使用绑定源使用LINQ从DataGridView中仅获取添加/修改的行?还是如何从绑定源获取DataTable(具有完整的DataRowStates)?