Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
АннаМисшина
0 / 0 / 0
Регистрация: 05.12.2014
Сообщений: 34
1

Фильтрация данных с возможностью изменять данных. framework 2.0

27.02.2017, 07:29. Просмотров 500. Ответов 11
Метки нет (Все метки)

Доброе время суток. У меня возникла такая проблемка))) нужен фильтр для столбца. т.е. пользователь вводит\выбирает свое ФИО и у него в датагрид выводятся строки только с его ФИО, так же нужна возможность редактирования данных. установила datagridviewAutoFilter, но не смогла настроить так чтобы выводил текст, выводит id (ФИО берутся из другой таблицы),еще пробовала установить фильтр как в ексель, не устанавливается, так же имеется такой код, но он не дает возможности редактировать таблицы (в комбобох выбирается столбец, в техтбох вводятся данные)

C#
1
2
3
4
5
6
7
8
9
10
11
        private void textBox1_TextChanged(object sender, EventArgs e)
        {
 
            if (comboBox1.Text == "ФИО Специалиста")
            {
                SqlDataAdapter sda = new SqlDataAdapter("select opis.id, opis.id_korp,opis.kab, opis.opisanie,opis.fio, opis.nomer, opis.data,opis.ispoln, opis.id_fio_spec,opis.Text, opis.Ball,opis.KonData, perc.id,perc.fio from opis inner join perc on opis.id_fio_spec = perc.id where ispoln=0 and perc.fio like '" + textBox1.Text + "%'", con);
                DataTable data = new DataTable();
                sda.Fill(data);
                opisDataGridView1.DataSource = data;
            }
        }
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.02.2017, 07:29
Ответы с готовыми решениями:

Создать базу данных с возможностью представления расчетных данных на определенную дату
Добрый день! Требуется создать базу данных с возможностью представления расчетных данных на...

Консоль. Контейнер для хранения данных с возможностью сортировки данных по любому полю.
Здравствуйте. Задача следующая: пользователь вводит в консоль табличные данныев формате (это...

База данных с возможностью приема данных из файлов Excel
Здравствуйте Уважаемые! В "Delphi для начинающих" по этому вопросу НИКТО не помог:( Может здесь я...

Как в Qt создать привязку табличных данных к QLineEdit через QSqlQueryModel с возможностью пересчета данных в таблице и на форме в QLineEdit
Уважаемые пишу программу с большим количеством вычислений возник вопрос Как в Qt создать привязку...

11
Козадоев
114 / 110 / 26
Регистрация: 05.03.2013
Сообщений: 636
27.02.2017, 07:46 2
А если он вводит не свое имя надо выводить данные по другому пользователю? Вопрос не раскрыт, что конкретно надо. Если пользователь должен работать только со своими данными, то он не должен ничего вводить и фильтровать дополнительно. Все данные должны грузиться только по тому пользователю, который с ними работает.

Добавлено через 1 минуту
Цитата Сообщение от АннаМисшина Посмотреть сообщение
Доброе время суток.
Добрый месяц года.
0
АннаМисшина
0 / 0 / 0
Регистрация: 05.12.2014
Сообщений: 34
27.02.2017, 07:52  [ТС] 3
если человек вводит другие данные, то открываются другие данные. с формой работает один человек.
0
Козадоев
114 / 110 / 26
Регистрация: 05.03.2013
Сообщений: 636
27.02.2017, 08:12 4
Тогда так:
ИсточникДанныхПоддерживающийФильтр.Filter = "Name Like '%Иванов Петр%'";

Добавлено через 5 минут
Если данных не слишком много - грузим все и фильтруем по вводимому значению, можно в реальном времени по мере набора - в событии TextChange TextBox-a например.

Добавлено через 1 минуту
Если данных много - тысячи или миллионы строк, то такой метод не подойдет. В этом случае вводим в текстбокс текст и давим на кнопку загрузить, а в селекте пишем условие Where Name = 'Иванов Петр Иванович';

Добавлено через 4 минуты
Может оказаться, что будут пользователи полные тезки, потребуются дополнительные данные по условию, например дата рождения или номер паспорта.
0
АннаМисшина
0 / 0 / 0
Регистрация: 05.12.2014
Сообщений: 34
27.02.2017, 08:26  [ТС] 5
самих данных будет много, а человек, фио которых нужно отфильтровать около 10.
Цитата Сообщение от Козадоев Посмотреть сообщение
Если данных много - тысячи или миллионы строк, то такой метод не подойдет. В этом случае вводим в текстбокс текст и давим на кнопку загрузить, а в селекте пишем условие Where Name = 'Иванов Петр Иванович';
0
Козадоев
114 / 110 / 26
Регистрация: 05.03.2013
Сообщений: 636
27.02.2017, 08:46 6
Цитата Сообщение от АннаМисшина Посмотреть сообщение
самих данных будет много, а человек, фио которых нужно отфильтровать около 10.
Кажется, наконец понял. У вас комбобокс с 10-ю фамилиями. Тогда по событию выборки человека в комбобоксе получаем его ID и далее грузим остальные данные в селекте WHERE ID=@ID. Как то так.
0
АннаМисшина
0 / 0 / 0
Регистрация: 05.12.2014
Сообщений: 34
27.02.2017, 09:06  [ТС] 7
да, у меня есть датагрид, в ней есть комбо бох, который привязан к другой таблице. Вот я и хочу организовать так, чтобы пользователь писал в текстбокс искомые ФИО Специалиста и выводились строки содержание эти данные. сам фильтр рабочий есть, он приведен в самом начале, но он не дает сохраняет данные, если их редактировать)))
0
Миниатюры
Фильтрация данных с возможностью изменять данных. framework 2.0  
Козадоев
114 / 110 / 26
Регистрация: 05.03.2013
Сообщений: 636
27.02.2017, 09:54 8
Не понятно для чего комбобокс "выбираем столбец". Ткстбокс "Воодим ФИО специалиста" также не нужен. Колонка ФИО специалиста не должна быть типа комбобокс - не к чему, смена ФИО специалиста просматривающему должна быть запрещена. А если это сам специалист, то он не должен себя выбирать, он должен проставляться автоматически - достаточно щелкнуть галочку "Выполнено" и ФИО должно само встать. Программа такого типа должна уметь идентифицировать пользователя, который с ней работает и все данные по этому пользователю вносить автоматически.
0
АннаМисшина
0 / 0 / 0
Регистрация: 05.12.2014
Сообщений: 34
27.02.2017, 11:02  [ТС] 9
фио должно выбираться, примерно должно быть так : пришла заявка, отобразилась в этой таблице, человек, который будет работать с этой формой, выбирает фио специалиста, который будет выполнять задачу. фильтрацию я хочу для того чтобы пользователь мог просмотреть все задачи определенного специалиста и если что, то изменить в этих строках данные.
Цитата Сообщение от Козадоев Посмотреть сообщение
Не понятно для чего комбобокс "выбираем столбец".
в нем выбираем столбец по которому будет идти фильтрация .
Цитата Сообщение от Козадоев Посмотреть сообщение
Ткстбокс "Воодим ФИО специалиста" также не нужен.
он нужен для моего "старого" фильтра, который на данный момент имеется.
0
Козадоев
114 / 110 / 26
Регистрация: 05.03.2013
Сообщений: 636
27.02.2017, 11:43 10
Цитата Сообщение от АннаМисшина Посмотреть сообщение
в нем выбираем столбец по которому будет идти фильтрация .
Я бы в этом случае сделал фильтр по всем столбцам (через OR) без выборки столбца (пользователю удобнее).
В остальном, если все верно сделать - проблем не должно быть. Редактирование должно работать. Надо учесть, что столбец типа comboBox привязан к другой таблице по ID пользователя. И в колонку загружаются ID а не имена. Чтобы фильтровать по именам - нужно фильтровать по ID либо грузить в отдельный скрытый столбец (например подзапросом LEFT JOIN в основном запросе) имена и фильтровать по нему.

Добавлено через 4 минуты
Посмотрел ваш код внимательнее - у вас не фильтр, а селект с условием! И все это в событии TextChanged! То есть на каждый вводимый символ производится новая загрузка. Это очень плохо, т.к. при достаточном кол-ве записей приведет к медленной работе и необоснованной нагрузке на сервер. Если делать через условие запроса - то по кнопочке, когда пользователь уже ввел все имя и нажал "Найти".

Добавлено через 2 минуты
Фильтр надо применять уже к загруженным данным. В событии TextChanged должно стоять типа такого
BindingSource.Filter = ...
а это sda.Fill(data); в событии Form1_Load

Добавлено через 8 минут
Сохранение в вашем коде не должно работать. Т.к. SqlDataAdapter у вас локально определен в событии TextChanged. И то, что вы пытаетесь сохранить - скорее всего не относится к изменяемым данным.
0
АннаМисшина
0 / 0 / 0
Регистрация: 05.12.2014
Сообщений: 34
27.02.2017, 11:45  [ТС] 11
C#
1
 opisBindingSource.Filter = (" select opis.id, opis.id_korp,opis.kab, opis.opisanie,opis.fio, opis.nomer, opis.data,opis.ispoln, opis.id_fio_spec,opis.Text, opis.Ball,opis.KonData, perc.id,perc.fio from opis inner join perc on opis.id_fio_spec = perc.id where ispoln=0 and perc.fio like '" + toolStripTextBox1.Text + "%'");
как-то примерно так?)))
Цитата Сообщение от Козадоев Посмотреть сообщение
Фильтр надо применять уже к загруженным данным. В событии TextChanged должно стоять типа такого
BindingSource.Filter = ...
а это sda.Fill(data); в событии Form1_Load
благодарю, за то что уделили время, буду пробовать))
0
Козадоев
114 / 110 / 26
Регистрация: 05.03.2013
Сообщений: 636
27.02.2017, 12:05 12
Цитата Сообщение от АннаМисшина Посмотреть сообщение
как-то примерно так?)))
Нет, тут Select не нужен.
C#
1
opisBindingSource.Filter = "fio like '%" + toolStripTextBox1.Text + "%'"
1
27.02.2017, 12:05
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.02.2017, 12:05

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Нарисовать кошку (с возможностью изменять размер)
Нарисовать фигуру по образцу. Реализовать алгоритм,позволяющий при нажатии клавиш увеличивать или...

textEdit - запрет ввода, но с возможностью изменять строку
Привет всем. есть textEdit. В нем строка, например "************". Подскажите каким образом...

liveCD с возможностью сохранения данных!
Ребят, Всем доброе утрое, приятного дня! подскажите какуюнить USB сборку на винде с возможностью...

Как заставить DataGrid изменять источник данных?
Вообщем я везде облазил и читал много чего. Пытаюсь разобраться с ситуацией: Допустим есть: ...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.