Если вы используете стандартный VCL TStringGrid
(без использования прямых привязок, доступных в последних версиях), вы можете использовать класс интерполятора для доступа к защищенному методу TCustomGrid.DeleteRow
.
Следующий код был протестирован в Delphi 2007. Он использует простой TStringGrid
, упавший на форму, со столбцами и ячейками по умолчанию и стандартом TButton
.
Обработчик события TForm.OnCreate
просто заполняет сетку некоторыми данными, чтобы упростить просмотр удаленной строки. Событие нажатия кнопки удаляет строку 1 из stringgrid при каждом щелчке.
Примечание: Код не проверяет ошибки, чтобы убедиться, что имеется достаточно строк. Это демо-приложение , а не пример производственного кода. Ваш фактический код должен проверить количество доступных строк, прежде чем пытаться его удалить.
// Interposer class, named to indicate it's use
type
THackGrid=class(TCustomGrid);
// Populates stringgrid with test data for clarity
procedure TForm1.FormCreate(Sender: TObject);
var
i, j: Integer;
begin
for i := 1 to StringGrid1.ColCount - 1 do
StringGrid1.Cells[i, 0] := Format('Col %d', [i]);
for j := 1 to StringGrid1.RowCount - 1 do
begin
StringGrid1.Cells[0, j] := Format('Row #d', [j]);
for i := 1 to StringGrid1.ColCount - 1 do
begin
StringGrid1.Cells[i, j] := Format('C: %d R: %d', [i, j]);
end;
end;
end;
// Deletes row 1 from the stringgrid every time it's clicked
// See note above for info about lack of error checking code.
procedure TForm1.Button1Click(Sender: TObject);
begin
THackGrid(StringGrid1).DeleteRow(1);
end;
Если вы используете более позднюю версию, и приложили данные к сетке с помощью живых привязок, вы можете просто удалить строку из исходных данных, и пусть живут привязки обрабатывать удаление строки.
Я не уверен, что правильно понимаю, но мне кажется, что у вас есть две структуры, список и сетка. Представленный вами код удаляет одну строку из сетки. Что мешает вам удалить соответствующий элемент из списка? – AlexSC
Так что я должен просто удалить за один раз элемент из списка и сетки? Я не думал об этом ... – Vekka
Если вы используете живые привязки для отображения списка в сетке, вы можете просто удалить элемент из списка. –