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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.12.2010, 15:15   #1
Aleksandr69
Пользователь
 
Регистрация: 11.12.2010
Сообщений: 71
По умолчанию StringGrid сравнение

Подскажите что не так нужно удалить все строки строки с 0 в 2 колонке



Код:

type
  THackGrid = class(TStringGrid);

procedure TForm2.Button5Click(Sender: TObject);
 var
 i: integer;

begin

   for i := 1 to Stringgrid1.RowCount -1 do    begin

  if StringGrid1.Cells[2, i] = '0' then

   begin

   THackGrid(StringGrid1).DeleteRow(i);

end;
end;
end;
Aleksandr69 вне форума Ответить с цитированием
Старый 21.12.2010, 15:24   #2
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Код:
while i < Stringgrid1.RowCount do begin
  if StringGrid1.Cells[2, i] = '0' then
    THackGrid(StringGrid1).DeleteRow(i)
  else
    Inc (i);
end;
Sibedir вне форума Ответить с цитированием
Старый 21.12.2010, 17:01   #3
Aleksandr69
Пользователь
 
Регистрация: 11.12.2010
Сообщений: 71
По умолчанию

странно но не работает реакция нулевая
Aleksandr69 вне форума Ответить с цитированием
Старый 21.12.2010, 17:09   #4
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

1. Что такое THackGrid?
2. Возможно в ячйке не "0", а " 0 ". Тогда
Код:
  if Pos ('0', StringGrid1.Cells[2, 1]) <> 0 then
Но тут сразу нюанс. Будет не правильно работать, если там "10".
3. Нужно определить i перед циклом
Код:
  i := 0;

Последний раз редактировалось Sibedir; 21.12.2010 в 17:13.
Sibedir вне форума Ответить с цитированием
Старый 21.12.2010, 17:12   #5
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

у меня тут пишет что в StringGrid нелзя добоблят или удалять строки, значит надо проводит имитацию удалениа, смешат все нижестояшие в верх
VirusN13
ArtGrek вне форума Ответить с цитированием
Старый 21.12.2010, 17:15   #6
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Логично. THackGrid, скорее всего, для этого и существует. Если проблема в нем, хотелось бы посмотреть реализацию.
Sibedir вне форума Ответить с цитированием
Старый 21.12.2010, 17:28   #7
Aleksandr69
Пользователь
 
Регистрация: 11.12.2010
Сообщений: 71
По умолчанию

1.метод удаления строки
2.сейчас проверю
Aleksandr69 вне форума Ответить с цитированием
Старый 21.12.2010, 17:32   #8
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

Цитата:
1.метод удаления строки
выложи, я тоже буду знат как ето делаеца
VirusN13
ArtGrek вне форума Ответить с цитированием
Старый 21.12.2010, 17:32   #9
Aleksandr69
Пользователь
 
Регистрация: 11.12.2010
Сообщений: 71
По умолчанию

Пример взял с этой ветки http://www.programmersforum.ru/showthread.php?t=119166

описание гдето читал в интернете смысл вроде такой что это защищенный метод удаления строки,да удаление еще и подругому делается просто показалось так проще записать

я удалял так

Код:

var
  i, j: integer;
begin
  for i := StringGrid1.Row to StringGrid1.RowCount - 1 do
  begin
    for j := 1 to StringGrid1.ColCount - 1 do
    begin
    StringGrid1.Cells[j, i]:=StringGrid1.Cells[j, i+1];
    end;
  end;
короче я так понял вся загвоздка с данными в ячейке точнее как они записаны

кто нидь помогите задача вроде простая пробежать по таблице и удалить все строки у которых во второй колонке 0 пробывал по разному удаляет но не так пропускает строки за несколько проходов все как нужно,но хотелось бы за один раз все удалить а не кликать на кнопку делал смещение тож не помогает

Цитата:
Сообщение от ArtGrek Посмотреть сообщение
выложи, я тоже буду знат как ето делаеца
Вот лови все удаляет

Код:

procedure GridDeleteRow(RowNumber: Integer; Grid: TstringGrid);
 var
   i: Integer;
 begin
   Grid.Row := RowNumber;
   if (Grid.Row = Grid.RowCount - 1) then
     { On the last row}
     Grid.RowCount := Grid.RowCount - 1
   else
   begin
     { Not the last row}
     for i := RowNumber to Grid.RowCount - 1 do
       Grid.Rows[i] := Grid.Rows[i + 1];
     Grid.RowCount := Grid.RowCount - 1;
   end;
 end;

 procedure TForm1.Button1Click(Sender: TObject);
 begin
   GridDeleteRow(3, stringGrid1);
 end;

в данном случае 3 строку все время

Последний раз редактировалось Stilet; 21.12.2010 в 19:27.
Aleksandr69 вне форума Ответить с цитированием
Старый 21.12.2010, 18:38   #10
Aleksandr69
Пользователь
 
Регистрация: 11.12.2010
Сообщений: 71
По умолчанию

делаю так все работает но приходиться жать на кнопку три четыре раза что не так

думаю нужно определить что делать программе если в ячейки любое другое чило



Код:


  var
  j, i, temp, max: integer;

   begin


   for i := 1 to Stringgrid1.RowCount -1 do    begin

  if StringGrid1.Cells[2, i] = '0' then

   begin

 GridDeleteRow(i, stringGrid1);
   end;
   end;
   end;
Цитата:
Сообщение от Sibedir Посмотреть сообщение
1. Что такое THackGrid?
2. Возможно в ячйке не "0", а " 0 ". Тогда
Код:
  if Pos ('0', StringGrid1.Cells[2, 1]) <> 0 then
Но тут сразу нюанс. Будет не правильно работать, если там "10".
3. Нужно определить i перед циклом
Код:
  i := 0;

в ячейки ноль код ниже работает но приходиться жать на кнопку несколько раз

В ячейки или 0 или больше 10



Код:

procedure TForm2.Button6Click(Sender: TObject);

  var
   i: integer;

   begin

   i:=1;

   for i := 1 to Stringgrid1.RowCount -1 do    begin

  if StringGrid1.Cells[2, i] = '0' then

   begin

 GridDeleteRow(i, stringGrid1);
   end;
   end;
   end;

Но вот так по идеи должно работать

Код:

 if StringGrid1.Cells[2, i] < '10' then

Последний раз редактировалось Stilet; 21.12.2010 в 19:28.
Aleksandr69 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сравнение строк Dasharnb777 Общие вопросы .NET 5 22.09.2010 20:46
firebird сравнение belii0987 БД в Delphi 6 17.09.2010 14:58
сравнение slavsmo Microsoft Office Excel 2 05.04.2010 17:51
stringgrid,сравнение двух столбцов на совпадения и не совпадения betirsolt БД в Delphi 7 19.01.2010 15:09
Сравнение данных White БД в Delphi 1 09.09.2008 22:32