Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.18;
Скачать: CL | DM;

Вниз

Сортировка в TStringGrid   Найти похожие ветки 

 
mike_forewer ©   (2004-04-01 23:47) [0]

Help! Подскажите, как в TStringGrid сделать сортировку строк по возрастанию/убыванию данных в каком-нить столбце ?


 
[BAD]Angel ©   (2004-04-02 00:10) [1]

я, когда был маленький, засовывал содержимое в листбокс, проводил сортировку там, а потом пихал назад в стринггрид :)
...
а вообще есть компонента, чтобы не мучаться называется она AH_COMP или ALI_GRID это одно и то же :) если не найдешь обращайся, будет время скину ~ 400Кб


 
Ozone ©   (2004-04-02 06:24) [2]

А ручками слабо?


 
ssk   (2004-04-02 09:32) [3]

вот нарыл где-то когда-то (может даже на Торри), но в работе не пробовал


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;


 
ssk   (2004-04-02 09:33) [4]

и вот еще


type
 TMoveSG = class(TCustomGrid); // reveals protected MoveRow procedure

{...}

procedure SortGridByCols(Grid: TStringGrid; ColOrder: array of Integer);
var
 i, j:   Integer;
 Sorted: Boolean;

function Sort(Row1, Row2: Integer): Integer;
var
 C: Integer;
begin
 C      := 0;
 Result := AnsiCompareStr(Grid.Cols[ColOrder[C]][Row1], Grid.Cols[ColOrder[C]][Row2]);
 if Result = 0 then
 begin
   Inc(C);
   while (C <= High(ColOrder)) and (Result = 0) do
   begin
     Result := AnsiCompareStr(Grid.Cols[ColOrder[C]][Row1],
       Grid.Cols[ColOrder[C]][Row2]);
     Inc(C);
   end;
 end;
end;

begin
 if SizeOf(ColOrder) div SizeOf(i) <> Grid.ColCount then Exit;

 for i := 0 to High(ColOrder) do
   if (ColOrder[i] < 0) or (ColOrder[i] >= Grid.ColCount) then Exit;

 j := 0;
 Sorted := False;
 repeat
   Inc(j);
   with Grid do
     for i := 0 to RowCount - 2 do
       if Sort(i, i + 1) > 0 then
       begin
         TMoveSG(Grid).MoveRow(i + 1, i);
         Sorted := False;
       end;
 until Sorted or (j = 1000);
 Grid.Repaint;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 { Sort rows based on the contents of two or more columns.
   Sorts first by column 1. If there are duplicate values
   in column 1, the next sort column is column 2 and so on...}
 SortGridByCols(StringGrid1, [1, 2, 0, 3, 4]);
end;



Страницы: 1 вся ветка

Текущий архив: 2004.04.18;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.057 c
14-1080303245
cypher
2004-03-26 15:14
2004.04.18
Филисофия программирования


6-1076414046
метеоролог
2004-02-10 14:54
2004.04.18
Компоненты для отправки почты


7-1076329781
WebErr
2004-02-09 15:29
2004.04.18
Как перегрузить соседний компьютер?


1-1080677294
Mishenka
2004-03-31 00:08
2004.04.18
Как в методе получить указатель на перем-ю, которая вызвала метод


1-1080810813
Denisoid
2004-04-01 13:13
2004.04.18
Вопрос по ShellTreeView!