![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() При сортировке stringgrid опускает отсортированные данные ниже, пробовал разные варианты, не помогает.
помогите сделать, чтобы помле сортировки ставил отсортированные данные также с 1 ячейки. |
#2
|
||||
|
||||
![]() В StringGrid нумерация строк и столбцов идет от 0, тоесть StringGrid.Cells[0,0], StringGrid.Rows[0], и тд.
|
#3
|
|||
|
|||
![]() С 0 делал, но тогда вообще данные часть не сортируется, а асть скрывается
|
#4
|
||||
|
||||
![]() Код:
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-1].Strings[ThatCol] + TheSeparator + //тут GenStrGrid.Rows[I-1].Text); Mylist.Sort; for K := 1 to Mylist.Count do begin MyString := MyList.Strings[(K - 1)]; 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)] := TempString; end; for J := 1 to (CountItem - 1) do GenStrGrid.Rows[J-1].Text := MyList.Strings[(J - 1)]; // тут end; finally MyList.Free; end; end; ![]() |
#5
|
|||
|
|||
![]() да, моя пузырьковый метод. Меняем местами значения, переставляя по возрастанию.
Страшный ты код выложил, уж очень огромный. Там же можно всего 3-мя строчками отсортировать ![]() |
#6
|
||||
|
||||
![]() ??? Так это твой код, просто переделанный
![]() мой код вот: Код:
procedure TForm1.Button2Click(Sender: TObject); var rc,cc:integer; s:string; b:boolean; begin b:=true; repeat b:=false; for rc:=0 to StringGrid1.RowCount-2 do begin for cc:=0 to StringGrid1.ColCount-1 do begin if (StringGrid1.Cells[cc,rc]>StringGrid1.Cells[cc,rc+1]) and (StringGrid1.Cells[cc,rc+1]<>'') then begin b:=true; s:=StringGrid1.Cells[cc,rc]; StringGrid1.Cells[cc,rc]:=StringGrid1.Cells[cc,rc+1]; StringGrid1.Cells[cc,rc+1]:=s; end; end; end; until b=false; end; |
#7
|
|||
|
|||
![]() спасибо, я кстати мучался-мучался со своей сортировкой, у меня раньше сортировался всего один столбец. У тебя также, сортируется не весь stringgrid а только 1 столбец, возможно как раз это из за переменных.
Но у меня уже получилось сортировать нормально с помощью громоздкого длинного кода, немного его изменив. |