![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Почему то сортирует столбец с числами вот так:
Получается: 100 110 150 20 250 А нужно: 20 100 110 150 250 Помогите разобраться. Вот код сортировки: Код:
procedure SortStringGrid(var GenStrGrid: TStringGrid; ThatCol: Integer); const TheSeparator = '@'; var CountItem, I, J, K, ThePosition: integer; MyList: TStringList; MyString, TempString: string; begin CountItem := GenStrGrid.RowCount; 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); Mylist.Sort; for K := 1 to Mylist.Count do begin MyString := MyList.Strings[(K - 1)]; ThePosition := Pos(TheSeparator, MyString); TempString := ''; TempString := Copy(MyString, (ThePosition + 1), Length(MyString)); MyList.Strings[(K - 1)] := ''; MyList.Strings[(K - 1)] := TempString; end; for J := 1 to (CountItem - 1) do GenStrGrid.Rows[J].Text := MyList.Strings[(J - 1)]; end; finally MyList.Free; end; end; |
|
#2
|
||||
|
||||
|
Цитата:
У класса TStringList есть метод CustomSort в котором можно указать своё правило сортировки - в данном случае просто преобразуем строки в число и сравниваем. Пример: Код:
function NumberSort(List: TStringList; Index1, Index2: Integer): Integer;
begin
Result := StrToInt(List[Index1]) - StrToInt(List[Index2]);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
MyList: TStringList;
begin
MyList:=TStringList.Create;
try
MyList.Add('150');
MyList.Add('100');
MyList.Add('20');
MyList.Add('250');
MyList.Add('110');
MyList.CustomSort(NumberSort);
ShowMessage(MyList.Text);
finally
MyList.Free;
end;
end;Последний раз редактировалось poli-smen, 11.12.2013 в 22:38. |
|
#3
|
|||
|
|||
|
Дело в том что у меня в StringGrid могут заносится ещё числа, так как
в таблице есть столбцы ещё: Название, Раздел, Цена. А эти числа я написал для примера. |
|
#4
|
||||
|
||||
|
Цитата:
Код:
function StrCmpLogicalW(psz1, psz2: PWideChar): Integer; stdcall; external 'shlwapi.dll'; function NumberSort(List: TStringList; Index1, Index2: Integer): Integer; var ws1, ws2: WideString; begin ws1 := List[Index1]; ws2 := List[Index2]; Result := StrCmpLogicalW(Pointer(ws1), Pointer(ws2)); end; Или вот ещё Rouse в своём блоге публикует свою аналогичную функцию чисто на Delphi: "Сортировка списка по аналогу "Проводника Windows"" |