Лидеры рейтинга

ID: 401284

Михаил Александров

Советник

380

Россия, Санкт-Петербург


ID: 259041

Алексеев Владимир Николаевич

Мастер-Эксперт

341

Россия, пос. Теплоозёрск, ЕАО


ID: 401888

puporev

Профессор

216

Россия, Пермский край


ID: 405338

vovaromanov.jr

1-й класс

114


ID: 400669

epimkin

Профессионал

112


ID: 242862

Hunter7007

Мастер-Эксперт

30

Россия, Омск


ID: 137394

Megaloman

Мастер-Эксперт

26

Беларусь, Гомель


8.10.2

13.10.2021

JS: 2.10.2
CSS: 4.6.0
jQuery: 3.6.0
DataForLocalStorage: 2021-10-23 16:46:01-standard


Создание программ на языках Pascal, Delphi и Lazarus.

Администратор раздела: Зенченко Константин Николаевич (Старший модератор)

Консультация онлайн # 109088

Раздел: Pascal / Delphi / Lazarus
Автор вопроса: Piit
Дата: 12.11.2007, 17:17 Консультация закрыта
Поступило ответов: 3

Здравствуйте!!! Подскажите пожалйста, как удалить строку i в компоненте TStringGrid. Мои попытки не увенчались успехом.
Я использовал в Delphi 7:
Rows.Delete(i) - ничего не делает (ошибка компиляции)
Rows[i].Delete(1) - ошибка (не может удалить). Это, как я вычитал потом, удаляет 1 ячейку в i строке.

В общем надо удалить строку из StringGrid программно в Delphi 7.
Спасибо за внимание

Ответ # 193451 от Mishell
Здравствуйте, Piit!
в TStringGrid нет стандартного удаления строки - можно только изменить кол-во строк
поэтому придется перенести данные из всех строк ниже на строку выше, после чего уменьшить кол-во строк в таблице на 1

Mishell

Посетитель
12.11.2007, 17:22
Ответ # 193456 от Yumark
Здравствуйте, Piit!

Я делал следующим образом:
1) Значения i-той строки заменял значением последней строки.
2) Уменьшал количество строк TStringGrid на единицу.

P.S.: Это хорошо, если массив не отсортирован.


Yumark

Посетитель
12.11.2007, 17:43
Ответ # 193466 от Gh0stik
Здравствуйте, Piit!

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

procedure DelRow(SGrid:TStringGrid; _row:integer);
var i,j:integer;
begin
   with SGrid do
   for i:=_row-1 to RowCount-2 do
     for j:=0 to ColCount-1 do
     begin
         Cells[j,i]:=Cells[j,i+1];
     end;
   SGrid.RowCount:=SGrid.RowCount-1;
end;


А вот непосредственно вызов процедуры:
DelRow(StringGrid1,3); //удаляем из StringGrid1 3-ю строку.

Good Luck!!!

Gh0stik

Посетитель
12.11.2007, 18:08
Мини-форум консультации # 109088
Нет сообщений в мини-форуме
Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.

Лучшие эксперты раздела

puporev

Профессор

Рейтинг: 216

Зенченко Константин Николаевич

Старший модератор

Рейтинг: 155

Gluck

9-й класс

Рейтинг: 82

Лысков Игорь Витальевич

Мастер-Эксперт

Рейтинг: 0

Асмик Гаряка

Советник

Рейтинг: 0

Орловский Дмитрий

Мастер-Эксперт

Рейтинг: 0