Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поиск в наборе даных, нужно организовать поиск 
V
    Опции темы
FreakK
Дата 12.3.2007, 01:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 1.7.2005
Где: Lviv (Ukraine)

Репутация: нет
Всего: нет



Здраствуйте. У меня такой вопрос: есть форма 
на ней DataGridView, BindingSource, TableAdapter и поле для поиска



Мне нужно в наборе найти запись, где значение поля name (строковое)
начинаетса или содержыт текст строки srt1.

пробовал 

agentsBindingSource.Find("name",str1);

но находит только если значения полностю совпадают...

помогите незнаю что делать.... smile 

PM ICQ   Вверх
archimed7592
Дата 12.3.2007, 01:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: нет
Всего: 93



м. б. agentsBindingSource.Find("name",String.Format ("%{0}%", str1))...по крайней мере, в sql запросе должно быть select ... from ... where name = '%bla-bla-bla%' вроде как smile


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
FreakK
Дата 12.3.2007, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 1.7.2005
Где: Lviv (Ukraine)

Репутация: нет
Всего: нет



нипошло :'(    smile 

PM ICQ   Вверх
mr.DUDA
Дата 12.3.2007, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 8
Всего: 232



Найти датасет, DataTable, выполнить Select c условием по LIKE '%bla-bla-bla%'


--------------------
user posted image
PM MAIL WWW   Вверх
FreakK
Дата 12.3.2007, 22:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 1.7.2005
Где: Lviv (Ukraine)

Репутация: нет
Всего: нет



нет мне нужно именно виделить в текущем наборе конкретную запись...
а не изменить запрос
PM ICQ   Вверх
NET_or_not_NET
Дата 13.3.2007, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 10.1.2007

Репутация: 1
Всего: 1



Поле "name" может быть отсортированно?  
PM MAIL   Вверх
NET_or_not_NET
Дата 13.3.2007, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 10.1.2007

Репутация: 1
Всего: 1



Не самое изащное решение, но РАБОЧЕЕ! если я конечно правильно понял, что надо,
а надо:
Цитата

виделить в текущем наборе конкретную запись...

оставив текущий набор без изменений... да? я имею ввиду изменений в датагриде (т.е. организовать горячий поиск)

если так то :

предположим что в Вашем наборе есть как минимум два поля  - ourname и idrow (некое id),
 а также :
DataGridView   -  DataGridView1
BindingSource  -  BindingSource1
textBox            -  textBox1                -  искомая строка или её часть

Код

            
            int idx = 1;       //это индекс в гриде

            DataView dataView1 = new DataView(dataSet1.Ваша Таблица);  // это дата виев как без него НЕ знаю!!

            dataView1.RowFilter = "ourname like '" + textBox1.Text + "%'";  // это наш фильтр, который будет выберать нужные нам строки

            foreach (DataRowView row1 in dataView1)
            {

                idx = (int)row1.Row["idrow"]; // смысл в следующем: из получившегося набора (который выбрал фильтр, 
                                                               // например " ourname like 'АВС%' ") берем первую строку, почему первую - 
                                                               // предпологаем что Грид отсортирован, но даже если нет - Мы то всеравно найдем
                                                               // просто это будет не так красиво как при отсортированном 

                break;
            }            

            dataGridView1.CurrentCell = dataGridView1[индекс Колонки ourname из грида, BindingSource1.Find("idrow", idx)];
            // делаем текущей ячейкой на гриде найденую 

замечу dataView1 не привязываем к Гриду (ведь нам не нужно чтобы менялся набор)

 smile  - согласен не фонтан, но ничего больше пока в голову не лезет   smile 

этот код можно использовать как при нажатии на некой кнопке (например "Найти") или при обработке нажатия кнопок в textBox1 будет так называемы "горячий поиск"

Возможно правильне будет использовать классы BindingContext и CurrencyManager, надо покапаться!

Вариант 2:
можно убрать BindingSource1, завязать все на dataView1 и не мучаться

Задам вопрос  - 
mr.DUDA а нельзя как нибуть вынести в отдельный блок вопросы по ГридВиев, ведь не всегда (а то и всегда) решение проблем с этим контролом выходит за рамки ВиндовсФормс , это могут быть проблемы конкретно с адаптером или той БД котороя используеться, просто не понятно где задовать вопрос , вроде проблема с контролом а решение может быть с БД, 
и например назвать тему так "А вот как я мучаюсь с dataGridView..." 

С Уважением  NET_or_not_NET

P.S. прошу прощения у FreakK просто не хотелось создавать новую тему! С Уважением  NET_or_not_NET

Это сообщение отредактировал(а) NET_or_not_NET - 13.3.2007, 16:38
PM MAIL   Вверх
mr.DUDA
Дата 13.3.2007, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 8
Всего: 232



Цитата(FreakK @  12.3.2007,  21:56 Найти цитируемый пост)
нет мне нужно именно виделить в текущем наборе конкретную запись...а не изменить запрос

Так я и не предлагаю менять запрос, а всего лишь выбрать из DataTable нужные строки (DataRow) методом DataTable.Select. При условии, что датагрид связан с DataSet-ом в качестве источника данных.


--------------------
user posted image
PM MAIL WWW   Вверх
Stepan_Lameroff
Дата 13.3.2007, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 164
Регистрация: 16.12.2006

Репутация: нет
Всего: 14



Контрол, работающий(может быть  smile ) по принципу, озвученному mr.DUDA

Присоединённый файл ( Кол-во скачиваний: 23 )
Присоединённый файл  DataGridFind.7z 2,33 Kb
PM MAIL   Вверх
NET_or_not_NET
Дата 13.3.2007, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 10.1.2007

Репутация: 1
Всего: 1



А можно и так как в премере который выложил Stepan_Lameroff
Цитата

Код

           
            DataRow[] dr = dt.Select(findIn + " like '" + find + "%'");
            if (dr.Length > 0)
            {
                string FirstValue = dr[0][findIn].ToString();
                index = bindingSource.Find(property, FirstValue);
                this.OnItemFound(new ItemFoundEventArgs(index));
            }


разница в том что вместо dataView1 и RowFilter
используеться DataRow[] dr и датасет.Select  

и это правильно  smile , но алгоритм действий тотже   smile 

PM MAIL   Вверх
FreakK
Дата 17.3.2007, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 1.7.2005
Где: Lviv (Ukraine)

Репутация: нет
Всего: нет



Пасиба всем вопщем получилось то что нужно))  smile 
PM ICQ   Вверх
mr.DUDA
Дата 17.3.2007, 19:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 8
Всего: 232



Да падёт на тебя его милостивая тень  smile 


--------------------
user posted image
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Базы данных под .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0972 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.