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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.03.2008, 16:28   #1
Andris
Пользователь
 
Регистрация: 15.09.2007
Сообщений: 12
Лампочка Delphi: Сортировка строк в StringGrid, критерий - элемент ячейки

Всем привет! Подскажите плиз что да как...
В компаненте StringGrid много строк и 7 столбцов. Задача в том, что бы отсортировать нажатием кнопки строки. В первых шести столбцах имена фамилии и тд, последний столбец определен под возраст. Вот по возрасту как строки отсортировать?
Andris вне форума Ответить с цитированием
Старый 04.03.2008, 16:35   #2
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

выбираем любой понравившийся метод сортировки и сортируем на здоровье
pu4koff вне форума Ответить с цитированием
Старый 05.03.2008, 01:21   #3
KORT
Вот я и
Форумчанин
 
Аватар для KORT
 
Регистрация: 07.04.2007
Сообщений: 501
По умолчанию

переделай чуть-чуть и все, точнее удали не нужное....
Код:
procedure TPagesDlg.Sort(S:Integer);
  var
    A:array of array of String;
    Min:Integer;
    j,i,k,y:Integer;
    Buf:String;
  begin
    SetLength(A,ComboBox1.Items.Count,4);
      For i:=0 to ComboBox1.Items.Count-1 do
        begin
          A[i,0]:=(StringGrid1.Cells[0,i+1]);
          A[i,1]:=(StringGrid1.Cells[1,i+1]);
          A[i,2]:=(StringGrid1.Cells[2,i+1]);
          A[i,3]:=(StringGrid1.Cells[3,i+1]);
        end;
          for i:=0 to ComboBox1.Items.Count-1 do
            begin
              Min:=i;
                For j:=i+1 to ComboBox1.Items.Count-1 do
                  begin
                    If S=0 then
                      If A[j,0]<A[Min,0] then
                        Min:=j;
                          If S=1 then
                            If A[j,0]>A[Min,0] then
                              Min:=j;
                  end;
                    For y:=0 to 3 do
                      begin
                        Buf:=A[i,y];
                        A[i,y]:=A[Min,y];
                        A[Min,y]:=Buf;
                      end;
            end;
              For y:=0 to 3 do
                For k:=0 to ComboBox1.Items.Count-1 do
                  begin
                    StringGrid1.Cells[y,k+1]:=A[k,y];
                  end;
  end;
Исходники программ - http:\\www.kort.3dn.ru
KORT вне форума Ответить с цитированием
Старый 07.03.2008, 13:17   #4
Andris
Пользователь
 
Регистрация: 15.09.2007
Сообщений: 12
Сообщение

А если я пошел таким путем и решил осуществить задуманное через список. Столкнулся с проблемой, не работает что то... Всесто того что нужно в итоге я получаю последнюю строку из первоначального стринграда и она копируеся по всем остальным строкам...
Поскажите плиз как исправить и в чем я не прав
зы: нужно данные изStringGrid отсортировать и отразить изменения в нем же, до сортировки пока не дошел, сначао нужно понять как вывести результат...
Код:
/////   {создание списка}   /////
    with StringGrid1 do
    begin
      MyList := TList.Create;
      for j := 1 to 10 do
      begin    {Заполнение списка}
        New(Person);
        Person^.Country := Cells[1, j];
        Person^.Gold := StrToInt(Cells[2, j]);
        Person^.Silver := StrToInt(Cells[3, j]);
        Person^.Bronze := StrToInt(Cells[4, j]);
        Person^.AllMedals := StrToInt(Cells[5, j]);
        Person^.Scor := StrToInt(Cells[6, j]);
        MyList.Add(Person);   {добавление эл-та в список}
      end; {for j}
    end;   {with StringGrid1}

    with StringGrid1 do              //очистка
      for j := 1 to RowCount -1 do   //
        StringGrid1.Rows[j].Clear;   //

  {ВЫВОД РЕЗУЛЬТАТА}
    with StringGrid1 do
      for j := 1 to Mylist.Count do
      begin
        Cells[1, j] := Person^.Country;
        Cells[2, j] := IntToStr(Person^.Gold);
        Cells[3, j] := IntToStr(Person^.Silver);
        Cells[4, j] := IntToStr(Person^.Bronze);
        Cells[5, j] := IntToStr(Person^.AllMedals);
        Cells[6, j] := IntToStr(Person^.Scor);
      end;

  ///// {Уничтожение списка MyList}
  for j := 0 to MyList.Count - 1 do
  begin
    Person := MyList[j];
    Dispose(Person); {уничтожаем эл-т списка}
  end;
  MyList.Free; {уничтожаем пустой список}
Andris вне форума Ответить с цитированием
Старый 07.03.2008, 13:39   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

На Delphi World (не понимаю почему люди постоянно игнорируют поисковые системы) есть превосходнейший пример сортировки по любой колонке.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.03.2008, 13:39   #6
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Код:
{ВЫВОД РЕЗУЛЬТАТА}  
    with StringGrid1 do  
      for j := 1 to Mylist.Count do  
      begin  
        Person := MyList[j-1];        
        Cells[1, j] := Person^.Country;   
        Cells[2, j] := IntToStr(Person^.Gold);   
        Cells[3, j] := IntToStr(Person^.Silver);   
        Cells[4, j] := IntToStr(Person^.Bronze);   
        Cells[5, j] := IntToStr(Person^.AllMedals);   
        Cells[6, j] := IntToStr(Person^.Scor);   
      end;
alexBlack вне форума Ответить с цитированием
Старый 07.03.2008, 14:10   #7
Andris
Пользователь
 
Регистрация: 15.09.2007
Сообщений: 12
Радость

огромный спасиб
Andris вне форума Ответить с цитированием
Старый 09.03.2008, 21:51   #8
Andris
Пользователь
 
Регистрация: 15.09.2007
Сообщений: 12
По умолчанию

а если вывод результата будет использоваться в программе многократно, то нужно соорудить процедуру... подскажите плиз как ето зделать
я так ето представляю,
procedure Codto(а вот тут что написать?);
begin
код...
end;
Спасибо.
Andris вне форума Ответить с цитированием
Старый 09.03.2008, 21:59   #9
Карась
Участник клуба
 
Аватар для Карась
 
Регистрация: 26.10.2007
Сообщений: 1,244
По умолчанию

Цитата:
Сообщение от Andris Посмотреть сообщение
а если вывод результата будет использоваться в программе многократно, то нужно соорудить процедуру... подскажите плиз как ето зделать
я так ето представляю,
procedure Codto(а вот тут что написать?);
begin
код...
end;
Спасибо.
Ничево

Или параметры которые нужны для вычислений.

http://www.delphibasics.ru/Procedure.php
Умом Россию не понять, пока не выпито ноль пять,
А если выпито ноль пять всё делом кажется не хитрым,
Попытка глубже понимать уже попахивает литром...
Карась вне форума Ответить с цитированием
Старый 09.03.2008, 23:04   #10
Andris
Пользователь
 
Регистрация: 15.09.2007
Сообщений: 12
Лампочка

Спасибо Сылка принесла пользу
Andris вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Координаты ячейки в StringGrid??? aslanbek Общие вопросы Delphi 13 01.08.2014 16:53
Ссылки на ячейки через несколько строк Marcellus Microsoft Office Excel 6 20.08.2008 08:53
Сортировка строк sheva75 Microsoft Office Excel 3 06.02.2008 05:00
Как сделать, чтобы один элемент списка в ComboBox писался в несколько строк? Andr Общие вопросы Delphi 5 15.08.2007 22:24