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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.08.2011, 12:15   #1
SPD
Пользователь
 
Регистрация: 30.11.2009
Сообщений: 41
По умолчанию удаление строки и смещение остальных строк вверх в StringGrid

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

01.07.2011 8:00 157 37,76
01.07.2011 20:00 164 42,52
02.07.2011 8:00 157 37,76
02.07.2011 20:00 183 56,55
03.07.2011 9:00 170 46,6
03.07.2011 20:00 164 42,52
04.07.2011 8:00 173 48,54
04.07.2011 20:00 170 46,6
05.07.2011 10:00 167 44,56
05.07.2011 16:00 224 97,6
05.07.2011 20:00 206 77,3
06.07.2011 8:00 191 63,35
06.07.2011 20:00 189 61,65
07.07.2011 8:00 197 68,45
07.07.2011 20:00 192 64,2
08.07.2011 8:00 183 56,55
08.07.2011 12:00 171 46,98
09.07.2011 4:00 167 44,56
09.07.2011 20:00 159 39,12

вот нужно удалить строки что не подходять под условие 8 и 20 часов...Делаю так:

Код:
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;

................................
for i:=1 to n do
begin
mis:=stringgrid1.Cells[0,i];
mis:=mis[12]+mis[13];
if (mis<>'20') or (mis<>'8') then
begin
GridDeleteRow(i, stringGrid1);
end;
но работает не правильно удаляет что и как хочет...(((подскажите пожалуйста в чем ошибка....?
Заранее благодарен...=)

Последний раз редактировалось SPD; 01.08.2011 в 13:19.
SPD вне форума Ответить с цитированием
Старый 01.08.2011, 13:26   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

взято тут

Код:
interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Grids, StdCtrls;

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure DeleteARow(Grid: TStringGrid; ARow: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation
{$R *.DFM}

type TMyGrid=class(TCustomGrid);

procedure TForm1.DeleteARow(Grid: TStringGrid; ARow: Integer);
begin
  TMyGrid(Grid).DeleteRow(ARow);
end;

procedure TForm1.FormCreate(Sender: TObject);
var i, j : integer;
begin
  for i:=StringGrid1.FixedRows to StringGrid1.RowCount-1 do
    for j:=StringGrid1.FixedCols to StringGrid1.ColCount-1 do
       StringGrid1.Cells[j,i] := IntToStr(i*100 + j+i);
end;

procedure TForm1.Button1Click(Sender: TObject);
var i : integer;
begin
  for i:=StringGrid1.RowCount-1 downto StringGrid1.FixedRows do
    if odd(StrToInt(StringGrid1.Cells[1,i])) // ТУТ ВАШЕ УСЛОВИЕ для удаляемых строк
      then begin
         // удалить целиком i-ю строку 
         DeleteARow(StringGrid1, i);
      end;
end;
Внимание! ВАЖНО! При удалении цикл крутим от последней строки к началу.
Иначе при удалении будет изменяться количество записей!
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление пустых строк в StringGrid с "поднятием" остальных artemavd Общие вопросы Delphi 12 30.05.2013 09:12
Удаление строк со сдвигом вверх Lyrical Microsoft Office Excel 10 04.09.2012 15:02
Удаление строк и столбцов в StringGrid Sarumjan Общие вопросы C/C++ 2 17.10.2010 20:38
Stringgrid удаление строки Horus92 Компоненты Delphi 2 25.05.2010 07:40
StringGrid - удаление строк и столбцов ReM Общие вопросы Delphi 4 22.12.2008 19:17