Компонент Delphi StringGrid









                                           ГЛАВНАЯ           СВОЙСТВА           СОБЫТИЯ           ПРИЁМЫ  ПРОГРАММИРОВАНИЯ



StringGrid Delphi

Как удалить нужную строку
в таблице StringGrid




   Мы можем легко добавить или удалить последню строку в компоненте StringGrid, но не так легко удалить строку в компоненте StringGrid, не являющуюся последней. Тем самым, чтобы удалить нужную строку в таблице StringGrid, необходимо писать собственную процедуру.

   Процедура, удаляющая нужную строку компонента StringGrid, должна сначала переписать все строки ниже удаляемой на одну строку вверх, затем очистить последнюю строку, затем уменьшить количество строк в таблице на одну. Очистка последней строки нужна, так как при последующем добавлении строки новая строка может иметь прежнее содержимое. Вот эта процедура:

procedure TForm1.DeleteRow(ARow: Integer);
var i, j: Integer;
begin
with StringGrid1 do
  begin
    for i:=ARow+1 to RowCount-1 do
    for j:=0 to ColCount-1 do
      Cells[j, i-1]:=Cells[j, i];
    for i:=0 to ColCount-1 do
      Cells[i, RowCount-1]:='';
    RowCount:=RowCount-1;
  end;
end;


   Если нужно сохранить содержимое нулевого столбца (это могут быть, например, номера строк, и если их переписать, то нумерация нарушится), нужно второй цикл делать не от 0 а от 1.


   Однако, есть более короткий метод удалить строку в таблице StringGrid. Нужно воспользоваться тем, что компонент StringGrid является наследником класса TCustomGrid. А этот класс имеет метод DeleteRow, удаляющий указанную строку.

   Итак, объявляем новый тип TMyGrid, являющийся наследником TCustomGrid, и затем пишем процедуру DeleteARow:

type TMyGrid=class(TCustomGrid);

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


   Вот и всё! Не забудьте прописать процедуру DeleteARow среди процедур типа TForm1.

   Теперь, чтобы удалить нужную строку в таблице StringGrid, нужно указать индекс нужной строки и в какой именно таблице. Вот так удаляем, например, текущую строку:

DeleteARow(StringGrid1, StringGrid1.Row);


Читайте также:
  • Как закрасить ячейку StringGrid Delphi

    Сайт из коллекции Компоненты Delphi    

    Карта сайта