Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/21: Рейтинг темы: голосов - 21, средняя оценка - 4.62
471 / 234 / 73
Регистрация: 25.05.2012
Сообщений: 1,054
Записей в блоге: 1
1

DataGridView, BindingSource.Filter: получить отфильтрованное

05.05.2017, 17:33. Показов 3908. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день!

Есть метод, сохраняющий содержимое DataTable в файл

C#
1
2
3
4
public static void ExportToFile(DataTable _dataTable, string _path)
{
     //код
}
На форме есть DataGridView, данные в нее попадают через BindingSource

C#
1
2
bindingSource1.DataSource = GetSomeDataTable();
dataGridView1.DataSource = bindingSource1;
после чего фильтруются с помощью свойства .Filter.

Как правильно передать результат применения фильтра (то есть только то что отображается в dataGridView1) в метод экспорта?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.05.2017, 17:33
Ответы с готовыми решениями:

BindingSource.Filter
Доброго времени суток. Помогите пожалуйста разобраться с фильтрацией. Произвожу фильтрацию по дата...

Bindingsource.filter через radiobutton
Здравствуйте, такая проблема. Есть таблица Товар, в которой есть поле "Название товара". На форму...

Bindingsource.filter для чисел
Добрый вечер! Возникла следующая проблема: как фильтровать данные из БД по числовому полю? когда...

Использование собственной функции в BindingSource Filter
Добрый день ! Стоит задача фильтровать данные в BindingSource с использованием своей функции....

8
18 / 18 / 8
Регистрация: 11.01.2016
Сообщений: 54
05.05.2017, 17:53 2
http://stackoverflow.com/quest... le-dataset
0
471 / 234 / 73
Регистрация: 25.05.2012
Сообщений: 1,054
Записей в блоге: 1
05.05.2017, 18:08  [ТС] 3
SvetR, читал. Не совсем понимаю, как это применить в моем случае
0
18 / 18 / 8
Регистрация: 11.01.2016
Сообщений: 54
05.05.2017, 19:43 4
К сожалению, с телефона в дороге. Я так понимаю, что getsomedatatable возвращает какую-то datatable? Если это так, то не совсем понимаю зачем Вам вообще нужен binding source. Но мало ли, бывает иногда специфическая необходимость. И если это так, то возьмите её, исходную таблицу, поставьте нужный фильтр для дефалтвью и возьмите фильтрованную таблицу (ссылка выше как) и делайте с ней что хотите, в том числе и сохраняйте.
1
471 / 234 / 73
Регистрация: 25.05.2012
Сообщений: 1,054
Записей в блоге: 1
05.05.2017, 22:06  [ТС] 5
SvetR, BindingSource использую, как и рекомендует Майкрософт, для привязки данных, фильтрации и сортировки.
Если я правильно понял ваш ответ и решение/workaround по ссылке, то:

В форме объявляю таблицу

C#
1
private DataTable filteredDataTable;
получаю ее тем же методом
C#
1
filteredDataTable = GetSomeTable();
перед экспортом применяю к ней фильтр от bindingSource1
C#
1
filteredDataTable.DefaultView.RowFilter = bindingSource1.Filter;
и передаю методу экспорта отфильтрованное представление:
C#
1
ExportToFile(filteredDataTable.DefaultView.ToTable(), path)
0
18 / 18 / 8
Регистрация: 11.01.2016
Сообщений: 54
06.05.2017, 00:17 6
Лучший ответ Сообщение было отмечено NewOrdered как решение

Решение

Практически, только не filteredDataTablе. Не путайтесь. Она не фильтрованная, это изначальная самая полная и исходная основная таблица. Так сказать sourceDataTable. Её и возвращает метод GetSomeTable(); Её можно привязать bindingSource1.DataSource = sourceDataTable; Из неё можно получать фильтрованные/сортированные другие таблицы, используя такие штуки как sourceDataTable.DefaultView.RowFilter или sourceDataTable.DefaultView.Sort, а так же запросы Select, Add(row) и т.д.
C#
1
2
3
4
5
6
7
8
9
10
sourceDataTable= GetSomeTable(); //Получаем при старте/загрузке 1 раз. Всё.
 
 
//кстати, dataGridView1.DataSource = mydatatable;  - вполне разрешенный религией подход :)
 
//Получение данных в необходимом виде:
sourceDataTable.DefaultView.RowFilter = SearchString; // строка поиска вида, например  "column1 Like '%" + textBox_Search.Text + "%' OR column2 Like '%" + textBox_Search.Text + "%'" ); 
DataTable filteredDataTable = sourceDataTable.DefaultView.ToTable();
или сразу 
dataGridView1.DataSource =  sourceDataTable.DefaultView.ToTable();
P.S.Сугубо ИМХО - лучше всё таки самому знать зачем, что и для чего делаешь. Если Вы не используете методы, свойства BindingSource, его действительно богатые возможности. Ну, например, не нужны нужны они вот тут. Бывает так. В основном как раз в 90% случаев и ненужны. То наф он нужен там где он не используется? чтоб просто было?
P.S.S. Извините, за возможную бессвязность повествования. Отмечание конца тяжелого и длительного рабочего периода и начала праздника внесло в него свою лепту. Если хотите, могу побыстрому в студии накидать пример связки DataTable-DataGridView с сортировкой/фильтрацией.
1
471 / 234 / 73
Регистрация: 25.05.2012
Сообщений: 1,054
Записей в блоге: 1
07.05.2017, 13:09  [ТС] 7
SvetR, думаю, что попробую избавиться от bindingsource в качестве посредника между datagridview и источником данных (datatable), тем более что простейший фильтр прекрасно реализуется средствами самой таблицы. За пример буду благодарен.
0
18 / 18 / 8
Регистрация: 11.01.2016
Сообщений: 54
12.05.2017, 15:16 8
На работе после праздников загруз - извините, забыл про обещанный пример. Вот накидал по быстрому.
Вложения
Тип файла: zip TableAndDataGrid.zip (112.1 Кб, 34 просмотров)
1
18 / 18 / 8
Регистрация: 11.01.2016
Сообщений: 54
15.05.2017, 11:09 9
Как просили.
Вложения
Тип файла: zip FW3.5.zip (118.2 Кб, 17 просмотров)
Тип файла: zip FW4.6.2.zip (120.6 Кб, 21 просмотров)
1
15.05.2017, 11:09
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.05.2017, 11:09
Помогаю со студенческими работами здесь

BindingSource.Filter запрос на выборку данных
Добрый день. Помогите пожалуйста разобраться со следующей проблемой. На форме есть два textbox'a в...

Все возможные выражения для BindingSource.Filter
Добрый день! А есть ли где-то перечень (тыкните, пожалуйста, не могу найти) всех ключевых слов и...

BindingSource. dataGridView. Как сделать независимый фильтр для двух dataGridView?
Из Access данные импортируются в dataGridView В качестве источника данных используется один и тот...

BindingSource и DataGridView
Есть небольшой класс описывающий человека со свойствами Name, Age. В конструкторе формы сделал...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru