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

"Сортировка строкового Grid в Delphi: избегаем разрушения структуры"

Delphi , Базы данных , Сортировка и Фильтр

В статье рассматривается проблема, связанная со строковыми Grid в Delphi, когда после сортировки происходит разрушение структуры таблицы. Приводится пример кода, который SortSTLGrid использует для сортировки строкового Grid, но при этом происходит сдвиг отсортированных строк в конец таблицы, а иногда и вовсе без номеров строк или с сохранением номеров. В качестве решения предлагается изменить подход к заполнению строкового списка (StringList) перед сортировкой, чтобы избежать добавления пустых строк и, таким образом, сохранить структуру таблицы после сортировки.

Пример кода, который SortSTLGrid использует для сортировки строкового Grid:

procedure TfrmPuntehou.SortSTLGrid(var grid:TStringGrid; columntotal:integer);
const
  separator = ',';
var
  iCount, i, j, k, iPos: integer;
  TheList: TStringList;
  sString, sTempString: string;
begin
  // процедура для сортировки от наименьшего к наибольшему значению
  // получение количества строк
  iCount := grid.RowCount;
  // создание списка
  TheList := TStringList.Create;
  TheList.Sorted := False;
  // блок try..finally
  try
    begin
      // заполнение списка
      for i := 1 to (iCount - 1) do
      begin
        TheList.Add(grid.Rows[i].Strings[columntotal] + separator + grid.Rows[i].Text);
      end;
      // сортировка списка
      TheList.Sort;
      // заполнение списка отсортированными строками
      for k := 1 to TheList.Count do
      begin
        sString := TheList.Strings[(k - 1)];
        iPos := AnsiPos(separator, sString);
        sTempString := '';
        // удаление разделителя и текста столбца в начале строки
        sTempString := Copy(sString, (iPos + 2), Length(sString));
        TheList.Strings[(k - 1)] := '';
        TheList.Strings[(k - 1)] := sTempString;
      end;
      // заполнение таблицы отсортированными строками
      for j := 1 to (iCount - 1) do
      begin
        grid.Rows[j].Text := TheList.Strings[(J - 1)];
      end;
    end;
  finally
    TheList.Free;
  end;
  // конец блока try..finally
end;

Решение проблемы заключается в том, чтобы не добавлять пустые строки в строковый список перед сортировкой. Это можно сделать, изменив процедуру заполнения списка, как показано в примере:

// процедура для сортировки от наименьшего к наибольшему значению
// получение количества строк
iCount := grid.RowCount;
// создание списка
TheList := TStringList.Create;
TheList.Sorted := False;
// блок try..finally
try
  begin
    // заполнение списка
    for i := 1 to grid.RowCount do
    begin
      if not grid.Rows[i].Text.IsEmpty then
      begin
        TheList.Add(grid.Rows[i].Strings[columntotal] + separator + grid.Rows[i].Text);
      end;
    end;
    // сортировка списка
    TheList.Sort;
    // заполнение списка отсортированными строками
    for k := 1 to TheList.Count do
    begin
      sString := TheList.Strings[(k - 1)];
      iPos := AnsiPos(separator, sString);
      sTempString := '';
      // удаление разделителя и текста столбца в начале строки
      sTempString := Copy(sString, (iPos + 2), Length(sString));
      TheList.Strings[(k - 1)] := '';
      TheList.Strings[(k - 1)] := sTempString;
    end;
    // заполнение таблицы отсортированными строками
    for j := 1 to grid.RowCount do
    begin
      grid.Rows[j].Text := TheList.Strings[(j - 1)];
    end;
  end;
finally
  TheList.Free;
end;
// конец блока try..finally

Теперь, когда пустые строки не добавляются в строковый список перед сортировкой, сортировка строкового Grid происходит без разрушения структуры таблицы.

Создано по материалам из источника по ссылке.

В статье рассматривается проблема разрушения структуры строкового Grid в 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 13:22:05/0.0057480335235596/1