Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 29.02.2012, 17:25
delphihelp delphihelp вне форума
Прохожий
 
Регистрация: 21.02.2012
Сообщения: 22
Репутация: 10
По умолчанию При сортировке stringgrid опускает отсортированные данные ниже

При сортировке stringgrid опускает отсортированные данные ниже, пробовал разные варианты, не помогает.
помогите сделать, чтобы помле сортировки ставил отсортированные данные также с 1 ячейки.
Вложения
Тип файла: rar сортировка.rar (233.5 Кбайт, 3 просмотров)
Ответить с цитированием
  #2  
Старый 29.02.2012, 17:43
Аватар для YVitaliy
YVitaliy YVitaliy вне форума
Местный
 
Регистрация: 14.12.2011
Сообщения: 481
Версия Delphi: Borland Delphi7
Репутация: 17
По умолчанию

В StringGrid нумерация строк и столбцов идет от 0, тоесть StringGrid.Cells[0,0], StringGrid.Rows[0], и тд.
Ответить с цитированием
  #3  
Старый 29.02.2012, 18:00
delphihelp delphihelp вне форума
Прохожий
 
Регистрация: 21.02.2012
Сообщения: 22
Репутация: 10
По умолчанию

С 0 делал, но тогда вообще данные часть не сортируется, а асть скрывается
Ответить с цитированием
  #4  
Старый 29.02.2012, 18:17
Аватар для YVitaliy
YVitaliy YVitaliy вне форума
Местный
 
Регистрация: 14.12.2011
Сообщения: 481
Версия Delphi: Borland Delphi7
Репутация: 17
По умолчанию

Код:
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  
Старый 29.02.2012, 18:43
delphihelp delphihelp вне форума
Прохожий
 
Регистрация: 21.02.2012
Сообщения: 22
Репутация: 10
По умолчанию

да, моя пузырьковый метод. Меняем местами значения, переставляя по возрастанию.
Страшный ты код выложил, уж очень огромный. Там же можно всего 3-мя строчками отсортировать
Ответить с цитированием
  #6  
Старый 29.02.2012, 19:19
Аватар для YVitaliy
YVitaliy YVitaliy вне форума
Местный
 
Регистрация: 14.12.2011
Сообщения: 481
Версия Delphi: Borland Delphi7
Репутация: 17
По умолчанию

??? Так это твой код, просто переделанный
мой код вот:
Код:
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  
Старый 01.03.2012, 16:26
delphihelp delphihelp вне форума
Прохожий
 
Регистрация: 21.02.2012
Сообщения: 22
Репутация: 10
По умолчанию

спасибо, я кстати мучался-мучался со своей сортировкой, у меня раньше сортировался всего один столбец. У тебя также, сортируется не весь stringgrid а только 1 столбец, возможно как раз это из за переменных.
Но у меня уже получилось сортировать нормально с помощью громоздкого длинного кода, немного его изменив.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 07:11.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025