Я начинаю работать с некоторыми привязанными к данным объектами 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);
}
}
}
ИМО, не самый эффективный способ обновления только добавленных или измененных строк. Я хотел бы использовать LINQ для этого, но я застрял в проблеме источника данных DataGridView. Поскольку я использую BindingSource для DataGridView, DataSource больше не имеет «Enumerable».
Вот что я попробовал:
var dt = ((DataTable)dgvWorkcenters.DataSource).AsEnumerable().Where
(r => r.RowState == DataRowState.Added || r.RowState == DataRowState.Modified).CopyToDataTable();
Так как мой DataSource является BindingSource, .NET не позволит мне преобразовать его в DataTable.
Как я могу использовать LINQ, чтобы получать только добавленные / измененные строки из DataGridView с использованием Binding Source? Или как мне получить DataTable (с неповрежденными DataRowStates) из источника привязки?