Правильный способ фильтрации сетки данных с использованием таблиц данных в C # WPF - PullRequest
0 голосов
/ 25 сентября 2018

Я создаю приложение WPF.Существует DataGrid, отображающий мои элементы и панель поиска для фильтрации данных.Как вы знаете, мы не можем иметь конкретные строки из Dataable, на которые можно ссылаться из другого источника данных.Таким образом, способ, которым я сейчас фильтрую, заключается в клонировании моей исходной базы данных и добавлении строк, соответствующих тексту панели поиска, в клонированную таблицу данных.После этой установки для таблицы данных ItemsSource в клонированную таблицу данных будут отображаться отфильтрованные строки.

Теперь проблема заключается в том, что когда я редактирую свою сетку данных с отфильтрованными строками, то очевидно, что клонированная таблица данных изменяется, а не исходная таблица данных.Так как же я могу сделать эти изменения в исходной таблице данных?

Я пытался ссылаться на строки из оригинальных данных, но это невозможно, так как один DataRow в памяти может иметь только один контейнер, в данном случае исходный.

РЕДАКТИРОВАТЬ

Ответ был прост вместо использования 2 DataTable, используйте DataView, который предназначен именно для этой цели.См. Модифицированный код ниже.

Моя логика фильтра:

var filteredTable = dt.Clone();

foreach( DataRow row in dt.Rows)
{
    if(row[FilterCategory].ToString().StartsWith(txtb_search.Text))
    {
         filteredTable.Rows.Add(row.ItemArray);
    }
}

ItemsGrid.ItemsSource = filteredTable.DefaultView;

1 Ответ

0 голосов
/ 25 сентября 2018

Вот как правильно выполнить фильтрацию с помощью DataView.Строка filter может иметь много форм в зависимости от требования.sortColumn сейчас равно filterColumn, но может быть любым столбцом для сортировки.Вот краткое руководство ко всему этому: http://www.csharp -examples.net / dataview-rowfilter /

 string filterColumn = dt.Columns[columnIndex].ToString();
 string filter = filterColumn + " LIKE '" + txtb_search.Text + "*'";

 DataView dv = new DataView(dt, filter, sortColumn , DataViewRowState.CurrentRows);
 ItemsGrid.ItemsSource = dv;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...