Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Сортировка TStringGrid

Delphi , Синтаксис , Сортировка

Сортировка TStringGrid

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

procedure SortStringGrid(var GenStrGrid: TStringGrid; ThatCol: Integer);
 const
   // Define the Separator 
  TheSeparator = '@';
 var
   CountItem, I, J, K, ThePosition: integer;
   MyList: TStringList;
   MyString, TempString: string;
 begin
   // Give the number of rows in the StringGrid 
  CountItem := GenStrGrid.RowCount;
   //Create the List 
  MyList        := TStringList.Create;
   MyList.Sorted := False;
   try
     begin
       for I := 1 to (CountItem - 1) do
         MyList.Add(GenStrGrid.Rows[I].Strings[ThatCol] + TheSeparator +
           GenStrGrid.Rows[I].Text);
       //Sort the List 
      Mylist.Sort;

       for K := 1 to Mylist.Count do
       begin
         //Take the String of the line (K – 1) 
        MyString := MyList.Strings[(K - 1)];
         //Find the position of the Separator in the String 
        ThePosition := Pos(TheSeparator, MyString);
         TempString  := '';
         {Eliminate the Text of the column on which we have sorted the StringGrid}
         TempString := Copy(MyString, (ThePosition + 1), Length(MyString));
         MyList.Strings[(K - 1)] := '';
         MyList.Strings[(K - 1)] := TempString;
       end;

       // Refill the StringGrid 
      for J := 1 to (CountItem - 1) do
         GenStrGrid.Rows[J].Text := MyList.Strings[(J - 1)];
     end;
   finally
     //Free the List 
    MyList.Free;
   end;
 end;

 procedure TForm1.Button1Click(Sender: TObject);
 begin
   // Sort the StringGrid1 on the second Column 
  // StringGrid1 nach der 1. Spalte sortieren 
  SortStringGrid(StringGrid1, 1);
 end;

Программный код на Delphi, который сортирует компонент TStringGrid по значениям в указанной колонке с помощью компонента TStringList для хранения значений из грида и алфавитного сортировки.

Обзор кода:

  1. Процедура SortStringGrid принимает два параметра: GenStrGrid, который является компонентом TStringGrid для сортировки, и ThatCol, который указывает индекс колонки для сортировки.
  2. Создается компонент TStringList под названием MyList и устанавливается свойство Sorted в False.
  3. Затем проходится по каждой строке в гриде, добавляя конкатенированный строковый элемент в MyList. Конкатенированный строковый элемент состоит из значения из указанной колонки (используя GenStrGrid.Rows[I].Strings[ThatCol]) и разделителя (TheSeparator, который установлен в '@').
  4. После создания списка, процедура сортирует MyList с помощью метода Sort.
  5. Затем проходится по каждому элементу в отсортированном списке и извлекает значение из оригинальной строки (используя Pos и Copy) без разделителя. Это эффективно удаляет текст из колонки, на которой был выполнен сортировка.
  6. Наконец, процедура заполняет грид отсортированными значениями, присваивая их соответствующим строкам.

Процедура Button1Click является обработчиком события клика кнопки. Она вызывает процедуру SortStringGrid, передавая в нее StringGrid1 и 1 (индекс второй колонки) как параметры.

Предложения:

  • Код может быть улучшен добавлением обработки ошибок для ловли исключений, которые могут возникнуть при сортировке.
  • Не ясно, почему используется разделитель; если он не необходим, можно удалить его или использовать более значимый разделитель.
  • Свойство Sorted компонента MyList установлено в False, но это может быть сделано намеренно. Если вы хотите, чтобы список был отсортирован в порядке возрастания, можно установить его в True.

В целом, код работает корректно и обеспечивает основную функцию сортировки для TStringGrid. Однако он может улучшиться с добавлением обработки ошибок и более эффективными алгоритмами для сортировки больших данных.

В статье описывается процедура для сортировки TStringGrid в Delphi, которая позволяет отсортировать строковый грид по выбранному столбцу.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Сортировка ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 11:50:21/0.0037271976470947/0