|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
сортировка таблицы
Привет! Подскажите, как сделать сортировку таблицы. Я вот написал, но что-то не работает.
procedure TForm2.Button9Click(Sender: TObject); Var k,a,b,c,d,e,v,x,k1,a1,b1,c1,d1,e1,v1,x1,k2,a2,b2,c 2,d2,e2,v2,x2:string; begin with StringGrid1 do begin if Cells[7,1]<Cells[7,2] then begin k:=Cells[0,2]; Cells[0,2]:=Cells[0,1]; Cells[0,1]:=k; a:=Cells[1,2]; Cells[1,2]:=Cells[1,1]; Cells[1,1]:=a; b:=Cells[2,2]; Cells[2,2]:=Cells[2,1]; Cells[2,1]:=b; c:=Cells[3,2]; Cells[3,2]:=Cells[3,1]; Cells[3,1]:=c; d:=Cells[4,2]; Cells[4,2]:=Cells[4,1]; Cells[4,1]:=d; e:=Cells[5,2]; Cells[5,2]:=Cells[5,1]; Cells[5,1]:=e; v:=Cells[6,2]; Cells[6,2]:=Cells[6,1]; Cells[6,1]:=v; x:=Cells[7,2]; Cells[7,2]:=Cells[7,1]; Cells[7,1]:=x; end; if Cells[7,2]<Cells[7,3] then begin k1:=Cells[0,2]; Cells[0,2]:=Cells[0,1]; Cells[0,1]:=k1; a1:=Cells[1,2]; Cells[1,2]:=Cells[1,1]; Cells[1,1]:=a1; b1:=Cells[2,2]; Cells[2,2]:=Cells[2,1]; Cells[2,1]:=b1; c1:=Cells[3,2]; Cells[3,2]:=Cells[3,1]; Cells[3,1]:=c1; d1:=Cells[4,2]; Cells[4,2]:=Cells[4,1]; Cells[4,1]:=d1; e1:=Cells[5,2]; Cells[5,2]:=Cells[5,1]; Cells[5,1]:=e1; v1:=Cells[6,2]; Cells[6,2]:=Cells[6,1]; Cells[6,1]:=v1; x1:=Cells[7,2]; Cells[7,2]:=Cells[7,1]; Cells[7,1]:=x1; if Cells[7,1]<Cells[7,3] then begin k2:=Cells[0,2]; Cells[0,2]:=Cells[0,1]; Cells[0,1]:=k2; a2:=Cells[1,2]; Cells[1,2]:=Cells[1,1]; Cells[1,1]:=a2; b2:=Cells[2,2]; Cells[2,2]:=Cells[2,1]; Cells[2,1]:=b2; c2:=Cells[3,2]; Cells[3,2]:=Cells[3,1]; Cells[3,1]:=c2; d2:=Cells[4,2]; Cells[4,2]:=Cells[4,1]; Cells[4,1]:=d2; e2:=Cells[5,2]; Cells[5,2]:=Cells[5,1]; Cells[5,1]:=e2; v2:=Cells[6,2]; Cells[6,2]:=Cells[6,1]; Cells[6,1]:=v2; x2:=Cells[7,2]; Cells[7,2]:=Cells[7,1]; Cells[7,1]:=x2; end; end; end; end; |
#2
|
|||
|
|||
Ну чего, никто не знает что ли???
|
#3
|
|||
|
|||
Я не понял вопрос. Алгоритмов сортировки в Интернете тьма. Давай уточним, как именно ты хочешь сортировать?
1) Отсортировать записи по одному из полей; 2) Отсортировать колонки по имени; 4) Отсортировать все ячейки по вертикали; 5) Отсортировать все ячейки по горизонтали; 6) Отсортировать все ячейки по диагонали (своеобразная комбинация 4 и 5). Зачем это нужно в твоем случае? |
#4
|
|||
|
|||
Смотри. Если StringCells[6,1]<StringCells[6,2], то мне нужно поменять их местами, а также строки, в которых находятся StringCells[6,1] и StringCells[6,2] соответственно. Потом их надо сравнить с StringCells[6,3].
Надеюсь понял. |
#5
|
|||
|
|||
Вот набросал.
Принимает: StringGrid - грид типа TStringGrid с данными; RowIndx - номер строки, по которой выполнять сортировку; StartCol - номер столбца, с которого начинается сортировка; StopCol - номер столбца, на котором окончить сортировку; Необходимо добавить проверки принимаемых значений и подумать о перестановке столбцов разом возможно через TStrings. Код:
procedure Sort(var StringGrid: TStringGrid; RowIndx: Integer; StartCol, StopCol: Integer); var Interval: Integer; i, j: Integer; Moved: Boolean; // пpизнак пеpестановки Str: AnsiString; begin if StartCol > StopCol then Exit; // начальное значение интеpвала Interval := (StopCol - StartCol) div 2; // цикл с yменьшением интеpвала до 1 while Interval > 0 do begin // пyзыpьковая соpтиpовка с интеpвалом // цикл, пока есть пеpестановки Moved := True; while Moved do begin Moved := False; for i := StartCol to StopCol - (1 + Interval) do begin if AnsiCompareText(StringGrid.Cells[i, RowIndx], StringGrid.Cells[i+Interval, RowIndx]) > 0 then begin // пеpестановка for j := 0 to StringGrid.RowCount - 1 do begin Str := StringGrid.Cells[i, j]; StringGrid.Cells[i, j] := StringGrid.Cells[i+Interval, j]; StringGrid.Cells[i+Interval, j] := Str; end; // пpизнак пеpестановки Moved := True; end; end; end; // yменьшение интеpвала Interval := Interval div 2; end; end; |
#6
|
|||
|
|||
Спасибо! Но, если честно, то я мало чего понял!?
|