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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.05.2008, 19:50   #1
dee_lv
Пользователь
 
Регистрация: 25.04.2008
Сообщений: 18
Вопрос StringGrid и сортировка

Написал вот такую процедуру сортировки StringGrid по столбцу по возрастанию:
Код:
procedure Sort_Col_Max(StringGrid1:TStringGrid; var col:integer);
var
  i,j: integer;
begin
 with StringGrid1 do
 begin

  for j:=2 to RowCount-1 do
  begin
    for i:=1 to RowCount-j do
    begin
      if Cells[col,i]>Cells[col,i+1] then
      begin
        Rows[RowCount+1]:=Rows[i+1];
        Rows[i+1]:=Rows[i];
        Rows[i]:=Rows[RowCount+1];
      end;
    end;
  end;

 end;
end;
Проблема вот в чём:
Если повесить этот же код просто на кнопку, и в строке
Код:
if Cells[col,i]>Cells[col,i+1] then
вместо col ввести номер столбца, по которому будет выполняться сортировка, то всё работает как надо. А если я использую код как самостоятельную процедуру, и значение col у меня задаётся из Edit, то сортировка идёт почему-то только по первому столбцу и всё.

Например, вот так:
Код:
var
  c: integer;
begin
  c:=StrToInt(Edit1.Text);
  Sort_Col_Max(StrGrd, c);
end;
dee_lv вне форума Ответить с цитированием
Старый 01.05.2008, 21:03   #2
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Поменяй имя переменной COL - оно совпадает с одним из свойств компонента TStringGrig или не надо использовать WITH, а везде указывать имя компонента.
Но лучше и легче всё-таки поменять имя
eoln вне форума Ответить с цитированием
Старый 01.05.2008, 21:11   #3
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Стоп! Вообще код неправильный
eoln вне форума Ответить с цитированием
Старый 01.05.2008, 22:19   #4
dee_lv
Пользователь
 
Регистрация: 25.04.2008
Сообщений: 18
По умолчанию

Цитата:
Сообщение от eoln Посмотреть сообщение
Поменяй имя переменной COL - оно совпадает с одним из свойств компонента TStringGrig или не надо использовать WITH, а везде указывать имя компонента.
Но лучше и легче всё-таки поменять имя
Поменял имя переменной - помогло. Спасибо, всё заработало.
dee_lv вне форума Ответить с цитированием
Старый 02.05.2008, 14:15   #5
dee_lv
Пользователь
 
Регистрация: 25.04.2008
Сообщений: 18
По умолчанию

Теперь такой вопрос:
Сортировку по алфавиту реализовал, теперь необходимо сделать фильтр, например, по первой колонке. Решил попробовать с использованием TStringList:
Код:
var
  Str: TStringList;

procedure TForm1.Button1Click(Sender: TObject);
var
  i,j: integer;
begin
  Str:=TStringList.Create;
  with StringGrid1 do
  begin
    for i:=0 to StringGrid1.RowCount do
    for j:=0 to StringGrid1.ColCount do
      begin
        if Cells[0,j]='г. Москва' then begin
        Str.Add(StringGrid1.Cells[i,j]); end;
      end;
  end;
end;
Затем вывожу в Мемо:
Код:
procedure TForm1.Button2Click(Sender: TObject);
var
  i: integer;
begin
  for i:=0 to Str.Count-1 do
    begin
      Memo1.Lines.Add(Str[i]);
    end;
end;
Вроде всё фильтруется. Но как затем список строк передать в StringGrid? У меня в компоненте несколько колонок, а строки в TStringGrid идут подряд.
dee_lv вне форума Ответить с цитированием
Старый 02.05.2008, 17:51   #6
dee_lv
Пользователь
 
Регистрация: 25.04.2008
Сообщений: 18
По умолчанию

Тему можно закрыть.
dee_lv вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi: Сортировка строк в StringGrid, критерий - элемент ячейки Andris Помощь студентам 9 09.03.2008 23:04
1. Сортировка Шелла по убыванию 2. Сортировка вставками по убыванию Arkuz Помощь студентам 1 25.09.2007 17:16
StringGrid dj jo Компоненты Delphi 2 15.02.2007 07:47