delphi удалить строку stringgrid

Как удалить нужную строку
в таблице 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 TMyGr >
procedure TForm1.DeleteARow(Grid: TStringGrid;
ARow: Integer);
begin
TMyGrid(Grid).DeleteRow(ARow);
end;

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

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

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

Вставка и удаление строк в StringGrid

Содержание материала

Автор: Dennis Passmore

Поскольку свойство Cols[x] компонента TStringGrid реально является компонентом TStrings, все методы TStrings применимы также и к Cols[x].

Недавно в интернете я нашел реализацию расширенных функций TStringGrid:

Создано: Dennis Passmore

1929 Mango Tree Drive

Edgewater, Fl. 32141

Данный код свободен в использовании при одном условии:

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

со ссылкой на автора.

Примечание по использованию кода:

Всякий раз при удалении Row (строки) или Column (колонки)

проверяйте наличие и удаляйте любые объекты, которые могли

быть назначены любой ячейке в строке или колонке, которые вы

собираетесь удалять, поскольку данный код не может знать ни

размера, ни типа ассигнованных ими объектов.

Sysutils, WinProcs, Grids;

procedure InsertRow(Sender: TStringGrid; ToIndex: Longint);

procedure DeleteRow(Sender: TStringGrid; FromIndex: Longint);

procedure InsertColumn(Sender: TStringGrid; ToIndex: Longint);

procedure DeleteColumn(Sender: TStringGrid; FromIndex: Longint);

TCSGr > class (TStringGrid)

procedure MoveRow(FromIndex, ToIndex: Longint);

procedure MoveColumn(FromIndex, ToIndex: Longint);

procedure TCSGrid.MoveRow(FromIndex, ToIndex: Longint);

procedure TCSGrid.MoveColumn(FromIndex, ToIndex: Longint);

procedure InsertRow(Sender: TStringGrid; ToIndex: Longint);

if ToIndex >= 0 then

with TCSGrid(Sender) do

if (ToIndex then

RowCount := RowCount + 1 ;

xx := RowCount — 1 ;

for yy := 0 to ColCount — 1 do

ObJects[yy, xx] := nil ;

if ToIndex 1 then

MoveRow(RowCount — 1 , ToIndex);

procedure DeleteRow(Sender: TStringGrid; FromIndex: Longint);

if FromIndex > l;

with TCSGrid(Sender) do

if (RowCount > 0 ) and (FromIndex then

if (FromIndex 1 ) then

MoveRow(FromIndex, RowCount — 1 );

Rows[RowCount — 1 ].Clear;

RowCount := RowCount — 1 ;

procedure InsertColumn(Sender: TStringGrid; ToIndex: Longint);

if ToIndex >= 0 then

with TCSGrid(Sender) do

if (ToIndex then

ColCount := ColCount + 1 ;

xx := ColCount — 1 ;

for yy := 0 to RowCount — 1 do

ObJects[xx, yy] := nil ;

if ToIndex 1 then

MoveColumn(ColCount — 1 , ToIndex);

procedure DeleteColumn(Sender: TStringGrid; FromIndex: Longint);

if FromIndex >= 0 then

with TCSGrid(Sender) do

if (ColCount > 0 ) and (FromIndex then

if (FromIndex 1 ) then

MoveColumn(FromIndex, ColCount — 1 );

Cols[ColCount — 1 ].Clear;

ColCount := ColCount — 1 ;

  • Назад
  • Вперёд >>

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!

Delphi , Компоненты и Классы , TStringGrid и TDrawGrid

Автор: Dennis Passmore

. я не нашел никаких методов для вставки и удаления строк.

Поскольку свойство Cols[x] компонента TStringGrid реально является компонентом TStrings, все методы TStrings применимы также и к Cols[x].

Недавно в интернете я нашел реализацию расширенных функций TStringGrid:

Статья Вставка и удаление строк в StringGrid раздела Компоненты и Классы TStringGrid и TDrawGrid может быть полезна для разработчиков на Delphi и FreePascal.

Комментарии и вопросы

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

Оцените статью