![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
сортировка StringGrid (число или текст) [D7]
Roman_S © (2007-04-18 22:02:00)Вот код, которым я сортирую StringGrid.
С текстовыми колонками всё срабатывает прекрасно… но с числовыми:
0 >> 1000 >> 358 >> 42
Какие изменения необходимо внести в код, чтобы (в зависимости от того – «числовая» колонка, или «текстовая») происходила сортировка по первым символам или по <> значению?
procedure SortGrid(SG: TStringGrid; Column: Integer; SortMode: sgSmData; StartWithin: Integer=0);
var MinRowId, RowId1, RowId2, ColId: Integer;
Temp1, Temp2: string;
function GetLongHintTrim(Str: String): String;
begin
Result := TriM(GetLongHint(Str));
end;
begin
for RowId1 := StartWithin to SG.RowCount - 2 do
begin
Temp1 := GetLongHintTrim(SG.Cells[Column , RowId1]);
MinRowId := RowId1;
for RowId2 := RowId1 + 1 to SG.RowCount - 1 do
begin
Temp2 := Getlonghinttrim(SG.Cells[Column, RowId2]);
if (SortMode=stUp) then
if Temp2 < Temp1 then begin
Temp1 := getlonghinttrim(SG.Cells[Column, RowId2]);
MinRowId := RowId2;
end;
if (SortMode=stDown) then
if Temp2 > Temp1 then begin
Temp1 := getlonghinttrim(SG.Cells[Column, RowId2]);
MinRowId := RowId2;
end;
end;
for ColId := 1 to SG.ColCount - 1 do
begin
Temp2 := SG.Cells[ColId, RowId1];
SG.Cells[ColId, RowId1] := SG.Cells[ColId, MinRowId];
SG.Cells[ColId, MinRowId] := Temp2;
end;
end;
end;
Virgo_Style (2007-04-18 22:31:00) [1]где сравнение, видишь? Там строки сравниваются. Если же колонка числовая, то строки надо перевести в числа и сравнить их.
Roman_S (2007-04-18 22:10:00) [2]1. Не хотелось бы загромождать программу лишним кодом (следовательно, модернизировать имеющийся)
2. Попытки найти в Интернете понятный для новичка (как, например, вышеописанный) код сортировки StringGrid по конкретной "числовой" колонке, по возрастанию и убыванию, не увенчались успехом
Virgo_Style (2007-04-18 22:05:00) [3]по всей видимости, надо сравнивать не строки, а числа, если колонка числовая.