Я создаю приложение 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;