Использование LINQ для фильтрации измененных / добавленных строк данных в источнике данных связанного DataGridView - PullRequest
0 голосов
/ 07 марта 2019

Я начинаю работать с некоторыми привязанными к данным объектами 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) из источника привязки?

...