Поиск:

Закрытая темаСоздание новой темы Создание опроса
> Поиск в таблице, стандартные средства 
:(
    Опции темы
ksili
Дата 11.4.2006, 08:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

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



Есть большая таблица (несколько тысяч строк на 6 столбцов). Нужно осуществлять поиск по значению в выбранном столбце. Хотелось бы ещё, чтобы поиск был индексный (или как он там называется), т.е. как в стандартном Help'e - по мере ввода строки поиска отсеиваются все неподходщие значения.

Так вот у меня вопрос. Всё это можно сделать и вручную, проверяя значение из каждой строки. Но лень. Нет ли стандартного класса или компонента типа списка, в котором бы была функция поиска? И/или сортировки, что тоже пригодится.

Хотел, конечно, использовать StringGrid чтоб таблицу легче было отображать, но там поиск точно вручную придётся делать. smile


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
Ctrl_Alt_Del
Дата 11.4.2006, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



ksili, создай базу данных. В ней таблицу проиндексируешь, загонишь данные, а дальше поиск и все остальное делается элементарно.
Тем более существуют TDBGrid, TDBEdit...
ИМХО оптимальный вариант
PM MAIL ICQ   Вверх
docwar
Дата 19.11.2006, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



А как быть, если до бд мне еще далеко, а поиск данных в StringGrid сделать надо?
Пробовал по-простому: организовывал цикл проверки for, где проверяется текст из эдита с данными первой колонки. Если же совпадений по таблице много, то занесенные действия при успешном поиске программа просто не выполняла.
Есть-ли стандартные алгоритмы поиска?
PM MAIL   Вверх
SenkraD
Дата 19.11.2006, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 3.2.2006
Где: Украина::Киев

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



Ну в библиотеке STL есть, только я ими ещё не пользовался так, что более подробно помочь не могу

А так не пробовал:  
Код

TStringList *RowsID = new TStringList();
String FindText = Edit1->Text;
int IndexCol = 0;//Или какой тебе надо - определи как-то
for(int i = 1; i < StringGrid1->RowCount - 1; i ++)//Первая строка я полагаю зафиксина
   if(FindText == StringGrid1->Cells[IndexCol][i])
      RowsID->Add(IntToStr(i));//явная конвертация для пущей уверености

if(RowsID->Count > 0)
   for(int i = 0; i < RowID->Count; i ++)
   {
      //Тут делаеш нужный действия на строкой  из StringGrid'a номер,
      //которой записан в списке по номером i
   }



--------------------
 Имеющий язык - да не убоится спросить! 
user posted image
PM MAIL ICQ   Вверх
docwar
Дата 19.11.2006, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Спасибо за ответ!
Минус такого алгоритма - не выполняет никаких действий, если нашел несколько совпадений!!!
Причем, i=0 при успешном поиске... странно...
PM MAIL   Вверх
docwar
Дата 19.11.2006, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Код для поиска написал! =) Осталось только выделить строку StringGrid или ячейку (все равно у меня выделяется целая строка при нажатии на ячейку этой строки)!
Искал на форуме, но ничего не нашел...
Заранее спасибо!

Добавлено @ 17:06 
Нужно выделить строку, зная номер строки и столбца таблицы.
PM MAIL   Вверх
Reptile
Дата 20.11.2006, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 30.9.2006
Где: Украина, Первомай ск

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



Ну Ты ведь знаеш номер строки smile  Пиши
Код

StringGrid1->Row = n;//n - номер строки

Или я что-то не так понял?
PM MAIL   Вверх
docwar
Дата 20.11.2006, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Именно это мне и нужно было! Спасибо! =)  =)
PM MAIL   Вверх
docwar
Дата 20.11.2006, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Написал вот такой код для поиска в StringGrid:
Код

AnsiString poisk;

Poisk = Edit1 -> Text;
for ( int i = 0; i < Form1->StringGrid1 -> RowCount; i++ )
{
for ( int j = 0; j < Form1->StringGrid1 -> ColCount; j++ )
{
if ( Form1->StringGrid1 -> Cells[j][i] == poisk )
Form1->StringGrid1->Row = i;
}
}

Но как сделать, чтобы выделялись все строки (результат поиска в которых положителен), а не только последняя???
PM MAIL   Вверх
Reptile
Дата 20.11.2006, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 30.9.2006
Где: Украина, Первомай ск

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



Цитата(docwar @  20.11.2006,  14:28 Найти цитируемый пост)
Но как сделать, чтобы выделялись все строки (результат поиска в которых положителен), а не только последняя???

Никак  smile
Как вариант можно делать найденые слова жирным, можно попробовать отсеять не нужные строки(т.е. удалить их). 


PM MAIL   Вверх
docwar
Дата 20.11.2006, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Можно тогда, правда, делать фон у строк как у выделенных.
только как же вызвать OnDrawCell по нажатию кнопки, если учесть, что у меня в прорисовке есть еще и другой код?
PM MAIL   Вверх
Reptile
Дата 20.11.2006, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 30.9.2006
Где: Украина, Первомай ск

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



Так и вызываеш, но лучше(наверное) всетаки сделать жирным smile 
PM MAIL   Вверх
docwar
Дата 20.11.2006, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Что придумать - не вопрос! =)
Но как быть с нажатием на кнопку? Не хватает ведь параметров...
PM MAIL   Вверх
Reptile
Дата 20.11.2006, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 30.9.2006
Где: Украина, Первомай ск

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



Цитата(docwar @  20.11.2006,  17:10 Найти цитируемый пост)
Не хватает ведь параметров... 

Потому и говорю - не парься изменяй шрифт и/или цвет текста во время поиска.

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


Бывалый
*


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

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



А как цвет текста одной строки поменять?
Так только всей таблицы: Form1->StringGrid1->Font->Color=StringToColor(0x00D0B2AD);
 smile 
PM MAIL   Вверх
Страницы: (3) Все [1] 2 3 
Закрытая темаСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


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

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


 




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


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

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