Как удалить нужную строку
в таблице 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.
Комментарии и вопросы
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.