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

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

Обсуждение

Неизвестный
12.11.2007, 17:22
общий
это ответ
Здравствуйте, Piit!
в TStringGrid нет стандартного удаления строки - можно только изменить кол-во строк
поэтому придется перенести данные из всех строк ниже на строку выше, после чего уменьшить кол-во строк в таблице на 1
Неизвестный
12.11.2007, 17:43
общий
это ответ
Здравствуйте, Piit!

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

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

Неизвестный
12.11.2007, 18:08
общий
это ответ
Здравствуйте, Piit!

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

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

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

Good Luck!!!
Форма ответа