Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.02.2012, 16:06   #1
Максим_83
Пользователь
 
Регистрация: 09.02.2012
Сообщений: 39
По умолчанию StringGrid фильтрация с ComboBox (Delphi)

Приветствую всех. Нужна помощь с кодом по поводу фильтрации данных в StringGrid.
Тут на форуме взял код.

Код:
procedure TForm1.BitBtn5Click(Sender: TObject);
const
  SortColumn = 7; // сортировка по столбцу, отсчёт с нуля
var i, j, k : integer;
  sTemp : string;
begin
  {Сортировка простым обменом, методом пузырька }
  for i:=StringGrid1.FixedRows to StringGrid1.RowCount-2 do
    for j:=i+1 to StringGrid1.RowCount-1 do
      if StrToIntDef(StringGrid1.Cells[SortColumn,i],-1) >
               StrToIntDef(StringGrid1.Cells[SortColumn,j],-1) then
        for k:=StringGrid1.FixedCols to StringGrid1.ColCount-1 do
          begin
            sTemp := StringGrid1.Cells[k,i];
            StringGrid1.Cells[k,i] := StringGrid1.Cells[k,j];
            StringGrid1.Cells[k,j] := sTemp;
          end;
end;
Есть на форме ComboBox и с помощью его хотелось бы сортировать информацию. Информация в виде текста, чисел и чисел через точку.

В коде сортировка осуществлена через SortColumn = 7;
Как туда можно привязать ComboBox и брать данные для сортировки из него?
Так же в ComboBox написаны слова, и хотелось бы чтобы каждая строка в ComboBox соответствовала числу.
Ещё после фильтрования вся информация отображается не сверху вниз, а опускается в самый низ StringGrid
Как это реализовать не знаю, вот и прошу помощи у знающих.
Максим_83 вне форума Ответить с цитированием
Старый 09.02.2012, 16:12   #2
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
Нужна помощь с кодом по поводу фильтрации данных в StringGrid.
Цитата:
Есть на форме ComboBox и с помощью его хотелось бы сортировать информацию. Информация в виде текста, чисел и чисел через точку.
Вы уж определитесь, фильтрация вам нужна или сортировка?
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 09.02.2012, 22:25   #3
Максим_83
Пользователь
 
Регистрация: 09.02.2012
Сообщений: 39
По умолчанию

Цитата:
Сообщение от DiemonStar Посмотреть сообщение
Вы уж определитесь, фильтрация вам нужна или сортировка?
В принципе я имел ввиду одно и тоже под словами "фильтрация" и "сортировка". Если столь важно значение что путаетесь в одном ответе, то пусть будет "сортировка".
Извените но ваше сообщение обсолютно не несёт какой либо ценной информации для меня или кого-то другого, в частности по данному вопросу.
Впредь прошу отвечать по сути без лишнего флейма.
Максим_83 вне форума Ответить с цитированием
Старый 10.02.2012, 09:58   #4
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
В принципе я имел ввиду одно и тоже под словами "фильтрация" и "сортировка"
Фильтрация - отбор строк/столбцов по определённым признакам
Сортировка - расположение строк/столбцов в порядке, определённом условием.
Т.е. в случае фильтрации необходимо скрывать часть информации из таблицы, а в случае сортировки - правильно её размещать.
Цитата:
Извените но ваше сообщение обсолютно не несёт какой либо ценной информации для меня или кого-то другого
Позвольте не согласиться - чтобы помочь, нужно точно знать, что делать: "копать яму" или "строить дом"...
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 11.02.2012, 01:56   #5
Максим_83
Пользователь
 
Регистрация: 09.02.2012
Сообщений: 39
По умолчанию

Цитата:
Сообщение от DiemonStar Посмотреть сообщение
Фильтрация - отбор строк/столбцов по определённым признакам
Сортировка - расположение строк/столбцов в порядке, определённом условием.
Т.е. в случае фильтрации необходимо скрывать часть информации из таблицы, а в случае сортировки - правильно её размещать.

Позвольте не согласиться - чтобы помочь, нужно точно знать, что делать: "копать яму" или "строить дом"...
Давайте с вами "строить дом" посредством сортировки если сможете помочь.
Максим_83 вне форума Ответить с цитированием
Старый 11.02.2012, 11:30   #6
GetMax
Форумчанин
 
Регистрация: 21.10.2010
Сообщений: 588
По умолчанию

Цитата:
Как туда можно привязать ComboBox и брать данные для сортировки из него?
Код:
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
   SortColumn:=StrToInt(ComboBox1.Text)-1;
end;
Переменная SortColumn описывается глобально
Цитата:
Так же в ComboBox написаны слова, и хотелось бы чтобы каждая строка в ComboBox соответствовала числу.
Не понял что вы имели ввиду. Приведите пример
Цитата:
Ещё после фильтрования вся информация отображается не сверху вниз, а опускается в самый низ StringGrid
Тоже не совсем понятно. Приведенный вами алгоритм прекрасно сортирует по возрастанию. Если нужна сортировка по убыванию, просто поменяйте знак ">" на знак "<"
Пользователь не знает, чего он хочет, пока не увидит то, что он получил.
Для благодарностей WMR R145235935681
GetMax вне форума Ответить с цитированием
Старый 11.02.2012, 19:54   #7
Максим_83
Пользователь
 
Регистрация: 09.02.2012
Сообщений: 39
По умолчанию

Цитата:
Сообщение от GetMax Посмотреть сообщение
Код:
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
   SortColumn:=StrToInt(ComboBox1.Text)-1;
end;
Переменная SortColumn описывается глобально

Не понял что вы имели ввиду. Приведите пример

Тоже не совсем понятно. Приведенный вами алгоритм прекрасно сортирует по возрастанию. Если нужна сортировка по убыванию, просто поменяйте знак ">" на знак "<"
Да сортирует прекрасно, отображение идёт по возрастанию. Но тут есть один неприятный нюанс. В StringGrid к примеру 10 строк(не столбцов, чтобы не путались), из них заполнено всего 3 строки. После сортировки эти строки отображаются не с "0" позиции как было до сортировки, а с "7" позиции при условии что остальные строки пустые.
Сами эти пустые строки будут заполняться в дальнейшем по требованию.
Максим_83 вне форума Ответить с цитированием
Старый 11.02.2012, 20:13   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

В коде 1-го сообщения циклы по всем строкам грида, переделайте на только информативные строки. Заменив StringGrid1.RowCount на число информативных строк
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 12.02.2012, 02:29   #9
Максим_83
Пользователь
 
Регистрация: 09.02.2012
Сообщений: 39
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
В коде 1-го сообщения циклы по всем строкам грида, переделайте на только информативные строки. Заменив StringGrid1.RowCount на число информативных строк
Прошу сильно не пинать. Как понимаю вами подсказанный метод мне не подходит. Там именно надо чтобы циклы проходили по всем строкам. Сегодня к примеру у меня с информацией 3 строки, а через неделю уже 10.
Это как получается что каждый раз для сортировки надо будет переписывать часть кода? Такое не подходит.

Цитата:
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
SortColumn:=StrToInt(ComboBox1.Text )-1;
end;

Переменная SortColumn описывается глобально
Направили на верную мыслю, спасибо, но сделал немного по своему и работает как надо.
Максим_83 вне форума Ответить с цитированием
Старый 12.02.2012, 06:23   #10
Максим_83
Пользователь
 
Регистрация: 09.02.2012
Сообщений: 39
По умолчанию

Изменил код вот так:
Код:
procedure TForm1.FormCreate(Sender: TObject);
Begin
ComboBox1.Items.AddObject('текст',TObject(2));
ComboBox1.Items.AddObject('текст'',TObject(7));
ComboBox1.Items.AddObject('текст'',TObject(8));
ComboBox1.Items.AddObject('текст'',TObject(9));
end;

procedure TForm1.BitBtn5Click(Sender: TObject);
var SortColumn, i, j, k : integer;
  sTemp : string;
begin
  ComboBox1.ItemIndex:=0; //Чтобы не вызывало ошибки при нажатии на кнопку без выбора строки
  SortColumn:=Integer(ComboBox1.Items.Objects[ComboBox1.ItemIndex]);
....остальная часть кода без изменений(решил оставить по убывающей)....
          end;
Всем спасибо за дискуссию.

Последний раз редактировалось Максим_83; 12.02.2012 в 06:34.
Максим_83 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Фильтрация по полю и вывод результатов в Combobox Explosion БД в Delphi 3 13.05.2010 15:44
ComboBox и StringGrid Кулманов Берик БД в Delphi 2 22.04.2010 15:34
Фильтрация в Delphi с помощью Combobox Веснушка_ната Помощь студентам 4 07.04.2009 02:36
ComboBox в StringGrid ГЫнок Помощь студентам 1 29.09.2008 11:51
StringGrid, ComboBox... monushka Помощь студентам 12 02.05.2008 20:31