| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Базы данных под .NET > Неточный поиск в dataGridView |
| Автор: okaton 10.12.2008, 12:53 |
| Здравствуйте |
| Автор: MasterOfCode 10.12.2008, 14:53 |
| Посмотри на первую ссылку в блоке: А здесь смотрели?, который под этой темой. |
| Автор: Unlocker 10.12.2008, 22:01 |
| ссылочка на топик с примерами, первый пост можешь не читать. а дальше идет то, что тебе надо. ,http://forum.vingrad.ru/forum/topic-239235/kw-dgv-dbnull.html |
| Автор: okaton 10.12.2008, 23:02 |
| Unlocker, спасибо большое, нечто подобное я уже видел, только я не понял как этим пользоваться... куда это прилаживать в textBoxе и как это связывается с dataGridView? MasterOfCode |
| Автор: Unlocker 11.12.2008, 01:32 | ||
попробую пояснить попроще.
|
| Автор: okaton 11.12.2008, 14:15 |
| Unlocker, спасибо, простите мой кретинизм, возникли вопросы baseFilter.Append("Name LIKE '%"+txtName.Text+"%'"); Name это имя колонки? Как построить синтаксис поиска во всех колонках? Что такое %? Чем характеризуется точный и не точный поиск? dsBooks.Books - я правильно понял что dsBooks объект типа DataTable ? Что тогда такое Books? |
| Автор: okaton 11.12.2008, 16:15 |
| MasterOfCode, спасибо за ответ а по поводу "привязка фильтра DataTable.Select() к DataridView" не подскажите? |
| Автор: okaton 11.12.2008, 18:08 | ||
Непонятность такая
После клика по кнопке в DataViewGrid исчезают мои колонки и возникают: RowError (пустая), RowState (колонка заполнена словом Added), Table (пустая), HasErrors (заполнена чекбоксами) - порядка 50 строк Подскажите пожалуйста, в каком месте ДНК у меня ошибка. |
| Автор: MasterOfCode 11.12.2008, 18:18 |
| http://forum.vingrad.ru/index.php?showtopic=239235&view=findpost&p=1719837 Я всегда так делал. |
| Автор: okaton 11.12.2008, 19:15 | ||
вроде так, но при этом переименовываются имена колонок, можно как-либо выйти из этого положения? и еще вывести список всех найденых значений, а то как то бестолково получается тут явно что-то не то... |
| Автор: Unlocker 11.12.2008, 20:49 | ||
| Я смотрю, что тема начала активно обсуждаться - вот бы мою недавнюю тему бы так обсуждать начали))). Поясню свой код
StringBuilder - объект для накопления нескольких критериев поиска. Строка - объект неизменяемый, поэтому к ней переходим только в самый последний момент. Метод StringBuilder.Append() cлужит для добавления новых критериев в запрос. txtName.Text - свойство Text компонента TextBox txtName. dgvBooks - DataGridView dsBooks - типизированный DataSet Books - DataTable Этот код из моей курсовой работы с минимальными корректировками, поэтому без преамбулы мог показаться сложным. А вот насчет использования полнотекстовых поисков в одном запросе по нескольким полям должен признать, что просто через "AND" оно нереализуемо. Я пробовал, у меня не получалось. Тут возможно либо придется самому логику прописывать с использованием регулярных выражений при последовательном просмотре полей, либо делать запрос непосредственно к ядру базы данных (даже не знаю, что лучше). |
| Автор: okaton 11.12.2008, 21:30 |
| Объясните пожалуйста этот момент dsBooks.Books В моем dataSet нет подобного свойства. Создаю так dataSet = new DataSet(); dataSet.Tables.Add(table1); |
| Автор: Unlocker 11.12.2008, 21:37 |
| DataSet - это мини-СУБД в оперативной памяти. Books - это имя реальной таблицы в БД. Если его типизировать (вложить в проект схему соответствующих таблиц и связей), то к таблицам БД можно будет обращаться двояко: 1) DataSet.Tables["<имя_таблицы>"] - это случай нетипизированного обращения, работает и в типизированном и нетипизированном DataSet; 2) DataSet.<имя_таблицы> - это случай типизированного обращения. Действует только в типизированных DataSet. После загрузки схемы у объекта появляются свойства - ссылки на соответствующие таблицы. |
| Автор: okaton 11.12.2008, 22:10 | ||
| Unlocker, видимо у меня случай нетипизированного DataSet Подкорректировал код
История повторяется. После клика по кнопке в DataViewGrid исчезают мои колонки и возникают: RowError (пустая), RowState (колонка заполнена словом Added), Table (пустая), HasErrors (заполнена чекбоксами). Это что такое и почему так происходит? З.Ы. Если не затруднит ответить, подскажите, а как типизировать DataSet? З.З.Ы. я вам в вашей теме ответил |
| Автор: Unlocker 11.12.2008, 22:50 |
| Типизация DataSet - штука довольно интересная. если разбираешься в XML, схему можно в блокноте написать, но проще всего в VisualStudio. Описывать все проблемы типизации на форуме точно не с руки, но могу посоветовать 3 источника знаний (книги): 1) С. Малик "ADO.NET 2.0 для профессионалов" Изд. "Виллиямс", 2006 2) Д. Сеппа "Программирование на Microsoft ADO.NET 2.0" Изд. Питер, 2007 3) Б. Гамильтон "ADO.NET. Сборник рецептов" Изд. Питер, 2005 первая из трех книг у меня в бумаге, все три есть в электронке в он-лайн библиотеках. в первой точно описан процесс типизации, во второй тоже, а вот третью пока изучить как следует не удалось. в последней может быть решение проблемы твоих ошибок, но не могу пока стопроцентно это утверждать. |
| Автор: okaton 12.12.2008, 21:56 |
| Unlocker, типизированные это видимо приведенные к стандарту скриптового языка запроса (SQL)? Все-таки кто-нибудь может понять в чем ошибка? |
| Автор: Unlocker 12.12.2008, 22:12 |
| Типизация - это строгий контроль типов со стороны платформы в программном коде. Типизация помогает сократить преобразования типов непосредственно в коде, уменьшить количество ошибок и увеличить быстродействие, связанные с преобразованиями. В общем случае, имея готовую БД в SQL Server, например, имеется возможность типизации прямо из СУБД посредством Visual Studio. К твоим DataSet подгружаются схемы с расширением .xsd, пример которой приложу к посту. Схему типов, как я уже упоминал можно создать и вручную. Работа адаптеров, для которых и пишутся запросы SQL, от типизации DataSet никак не зависит, потому что это разные классы. |
| Автор: okaton 13.12.2008, 17:50 |
| Unlocker, Большое спасибо за полные и понятные разъяснения |
| Автор: okaton 17.12.2008, 18:51 |
| Кто-нибудь может сказать почему у меня не работает поиск? |
| Автор: Unlocker 17.12.2008, 20:30 |
| Как организован поиск? примеры кода или SQL запроса, если имеются... |
| Автор: okaton 17.12.2008, 20:48 | ||
| У меня программка в которой 2 dataGridView, которые подключены к двум dataTable, которые подключены к dataSet. Информация которой заполняются гриды сохраняется в xml, соответственно при старте программы этот фай загружается (или создается). Это функциональная часть. Про SQL запрос сказать ничего не могу, я его сам не создавал. Подключений никаких нет. Последний код который я использовал:
После обработки события (код выше) в DataViewGrid исчезают мои колонки и возникают: RowError (пустая), RowState (колонка заполнена словом Added), Table (пустая), HasErrors (заполнена чекбоксами). Причем, что интересно количество этих строк примерно равно количеству найденых значений. Сверх непонятно! |
| Автор: Unlocker 17.12.2008, 20:58 |
| как я уже упоминал здесь. простое использование двух полнотестковых поисков в одном запросе не дает вообще никакого результата. пока времени посидеть над книгой Б. Гамильтона "ADO.NET. Cookbook", если выдастся свободный денек, то рекомендую посмотреть. единственное, что приходит в голову - это использование дополнительной таблицы, в которой будет сохраняться результат одного полнотестового поиска, чтобы потом его пересечь или объединить с другим результатом, но это пока теоретически. на практике, повторюсь, пока нет времени поискать и попробовать. |
| Автор: okaton 17.12.2008, 21:25 | ||
Ладно, один запрос, результат тот же
Книгу (Билл Гамильтон. ADO.NET. Сборник рецептов) сейчас скачаю, посмотрю |
| Автор: Unlocker 17.12.2008, 23:00 |
| у меня запрос такого типа вполне нормально получался. |
| Автор: MasterOfCode 18.12.2008, 18:18 | ||
Делай так:
Добавлено через 1 минуту и 2 секунды Функция Select у DataTable возвращает DataRow[] и видать массив строк нельзя указывать в качестве источника данных... |
| Автор: okaton 19.12.2008, 17:22 | ||
MasterOfCode, отладчик ругается на .AsDataView()
:( |
| Автор: MasterOfCode 20.12.2008, 13:49 | ||
В этот день не хочеться открывать студию и смотреть какая библиотека отвечает за AsDataView, поэтому делай так:
|