Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.10.2007, 09:54   #1
monushka
Форумчанин
 
Аватар для monushka
 
Регистрация: 26.10.2007
Сообщений: 112
Сообщение Проблема со StringGrid'ом

У меня есть один SG, в котором указаны следующие данные: 1 колонка - наименование оборудования, 2 - место размещения, 5 - техническое состояние (оценка от1 до 5), 6 - рекомендации. Нужно отсортировать данные по оценке за тех. состояние. Если какому-то оборудованию поставлена 3, то из SG1 эта строка копируется в SG2. Я написала так:
Код:
for i:=1 to 151 do
 begin
  if (SG1.Cells[4,i]='__________3__________')  then
   begin
   for x:=2 to SG2.RowCount do
   for y:=0 to 5 do
    begin
     SG2.Cells[0,x-1]:=SG1.Cells[0,i];
     SG2.Cells[1,x-1]:=SG1.Cells[1,i];
     SG2.Cells[2,x-1]:=SG1.Cells[2,i];
     SG2.Cells[3,x-1]:=SG1.Cells[3,i];
     SG2.Cells[4,x-1]:=SG1.Cells[4,i];
     SG2.Cells[5,x-1]:=SG1.Cells[5,i]; 
    end;
    SG2.RowCount:=SG2.RowCount+1;
   end;
  end;
но в результате у меня копируется только последняя строка с оценкой 3 и столько раз, сколько троек было вообще. Т.е. если 4 разных оборудования получили 3, то скопируется последнее оборудование с тройкой четыре раза. Вот такая проблема... Помогите, пожалуйста, ее решить.
Спасибо
If you wanna make the world a better place take a look at yourself and then make a change!

Последний раз редактировалось Alex21; 31.10.2007 в 10:57. Причина: теги code
monushka вне форума Ответить с цитированием
Старый 31.10.2007, 10:35   #2
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

Попробуйте так
Код:
for i:=1 to 151 do
  if (SG1.Cells[4,i]='__________3__________') then
    begin
      if SG2.RowCount <= i then
        SG2.RowCount:=SG2.RowCount+1; 
      for y:=0 to 5 do
        SG2.Cells[y,i]:=SG1.Cells[y,i];
    end;
Если не заработает, выкладывайте программу целиком, поправлю
_Dmitry вне форума Ответить с цитированием
Старый 31.10.2007, 10:47   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Эта тема уже была. Ишите поиском. И ответы там даны
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 31.10.2007, 12:14   #4
monushka
Форумчанин
 
Аватар для monushka
 
Регистрация: 26.10.2007
Сообщений: 112
По умолчанию

Dmitry, спасибо за помощь! Это несколько помогло. Только теперь копируются все строки с оценкой 3 кроме последней и вместо строк, в которых были оценки не 3, остается пустая строка.
If you wanna make the world a better place take a look at yourself and then make a change!

Последний раз редактировалось monushka; 31.10.2007 в 12:21.
monushka вне форума Ответить с цитированием
Старый 31.10.2007, 12:25   #5
AlDelta
Реанимируюсь...
Участник клуба
 
Аватар для AlDelta
 
Регистрация: 19.07.2007
Сообщений: 1,445
Сообщение

Попробуй использовать этот код.
Код:
procedure TForm1.Button1Click(Sender: TObject);
var i,count:integer;
begin
i:=1;
count:=1;
while StringGrid1.Cells[0,i]<>'' do
Begin
if StringGrid1.Cells[Х,i]='3' then//вместо Х ставишь номер нужного тебе столбца
Begin
StringGrid2.Rows[count]:=StringGrid1.Rows[i];
count:=count+1;
End;
i:=i+1;
End;
end;
Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте.
Правила форума => Правила раздела => Для общего развития => Помощь студентам => Перед тем, как создавать тему, скачайте себе...
P.S.: форум не песочница (с)
название статьи на сайте MS: "Отмена принудительного отключения автоматического запуска в реестре Windows"
AlDelta вне форума Ответить с цитированием
Старый 31.10.2007, 12:42   #6
monushka
Форумчанин
 
Аватар для monushka
 
Регистрация: 26.10.2007
Сообщений: 112
По умолчанию

AlDelta, если пользоваться Вашим кодом, то копирует только первую строку с оценкой 3. Блин, достала меня уже эта прога! Столько вариантов перепробовала, не могу понять чего ей надо!
If you wanna make the world a better place take a look at yourself and then make a change!
monushka вне форума Ответить с цитированием
Старый 31.10.2007, 13:34   #7
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

А если так
Код:
k:=1;
for i:=1 to 151 do
  if (SG1.Cells[4,i]='__________3__________') then
    begin
      if SG2.RowCount <= k then
        SG2.RowCount:=SG2.RowCount+1; 
      for y:=0 to 5 do
        SG2.Cells[y,k]:=SG1.Cells[y,i];
      k:=k+1;
    end;

Последний раз редактировалось _Dmitry; 31.10.2007 в 14:13.
_Dmitry вне форума Ответить с цитированием
Старый 31.10.2007, 14:36   #8
monushka
Форумчанин
 
Аватар для monushka
 
Регистрация: 26.10.2007
Сообщений: 112
Радость Уррраа!!

_Dmitry, ОГРОМНЕЙШЕЕ Вам спасибо!!! Она наконец-то заработала правильно!!!!
If you wanna make the world a better place take a look at yourself and then make a change!
monushka вне форума Ответить с цитированием
Старый 31.10.2007, 15:13   #9
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

Всегда пожалуйста
_Dmitry вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с dll( DM_bite Помощь студентам 10 31.07.2008 16:05
Помогите, пожалуйста, со StringGrid'ом! monushka Помощь студентам 3 27.10.2007 19:17
проблема с *.chm FAiver Свободное общение 5 28.09.2007 21:01