Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Удаление строк в TStringGrid


Автор: programast 26.6.2006, 18:07
Здрасти.

в drkb нашел удаление строки в гриде от Vit:

Type TFakeGrid=class(TCustomGrid); 

procedure TForm1.MyDelete(Sender: TObject); 
begin 
 TFakeGrid(Grid).DeleteRow(Grid.row);  
end;


но очень хочется знать... почему у TStringGrid нет собственного метода Delete как у TCustomGrid
для удаления строки?

з.ы. просто интерес разрывает в хлам... 

Автор: _hunter 26.6.2006, 18:20
потому как он там абсолютно не нужен 

Автор: programast 26.6.2006, 18:49
Цитата(_hunter @ 26.6.2006,  18:20)
потому как он там абсолютно не нужен

почему не нужен этот метод?
я думаю, было бы логично если бы класс был самодостаточным: имел свои методы работы со своими данными... а так... не понимаю... 

Автор: Palladin 26.6.2006, 18:58
Потомучто это почти никому ненужно, если сильно нада то организуй работу так:
удаляеш все элементы из ненужной строки, а потом смещаеш элементы , в конце измениш размерность, уменьших строки или столбцы, в зависимости от того что тебе нужно! 

Автор: Yanis 26.6.2006, 19:09
Цитата(RooR @  26.6.2006,  19:58 Найти цитируемый пост)
если сильно нада то

то делай так как предложили Vit. 

Автор: skyboy 26.6.2006, 19:34
RooR, переброска элементов не самое лучшее решение. Тогда уж лучше использовать DrawGrid, а источником использовать массив указателей на строки. Не нужна строка - и без перебрасывания данных ра-а-а-аз! И вместо 2 строки - треьтья smile 

Автор: programast 27.6.2006, 12:33
ясно... спасибо =) 

Автор: programast 28.6.2006, 12:19
кстати, вот такой вопрос: если в гриде было допустим 10 строк, потом в рантайме количество строк уменьшить на сколько-нибудь... что станет с последними строчками, которые теперь не нужны?
они просто станут невидимыми или они уничтожатся? (с колонками по идее тоже самое должно быть)
Код

  Grid.RowCount := 10;
  Grid.RowCount := 7;
// что станет с последними тремя строками?

 

Автор: Palladin 28.6.2006, 12:33
ТОлько что проверил, они просто невидны, и если их не очищать то они будут храниться в стринггриде, проверено такой вот прогой, на форме два стринггрида и кнопка, плюс ещё два едита для размерности(не обязательны):

Код

procedure TForm1.Button2Click(Sender: TObject);
var
a:array[0..100,0..100]of integer;
i,j,n,m:integer;
begin

n:=strtoint(edit1.text);
m:=strtoint(edit2.text);
 stringgrid1.RowCount:=3;
 stringgrid1.Colcount:=1;
   for i:=0 to n-1 do
     for j:=0 to m-1 do begin
        a[i,j]:=strtoint(stringgrid1.cells[i,j]);
      stringgrid2.Cells[i,j]:=inttostr(a[i,j]);
                         end;
   end;

end.


Добавлено @ 12:35 
Гриды по дефолту размерностью 3х3 

Автор: programast 28.6.2006, 13:17
да, я тоже проверил... 
заполнил грид, потом уменьшил количество строк и прочитал значения невидимой строки... прочиталось
значит они просто становяятся невидимыми  =( 

Автор: Yanis 28.6.2006, 13:33
Цитата(programast @  28.6.2006,  13:19 Найти цитируемый пост)
что станет с последними строчками, которые теперь не нужны?

Они остануться "где то там" smile Если действительно хочешь удалять строки, то используй метод Clear у TStrings. Например:
Код
// для полного удаления последней строки используй такой код
  StringGrid1.Rows[StringGrid1.RowCount-1].Clear;
  StringGrid1.RowCount := StringGrid1.RowCount - 1;
 

Автор: programast 28.6.2006, 13:50
Цитата(Yanis @ 28.6.2006,  13:33)
Цитата(programast @  28.6.2006,  13:19 Найти цитируемый пост)
что станет с последними строчками, которые теперь не нужны?

Они остануться "где то там" smile Если действительно хочешь удалять строки, то используй метод Clear у TStrings. Например:
Код
// для полного удаления последней строки используй такой код
  StringGrid1.Rows[StringGrid1.RowCount-1].Clear;
  StringGrid1.RowCount := StringGrid1.RowCount - 1;

так StringGrid1.Rows[StringGrid1.RowCount-1].Clear; он же вроде только "обнулит" значение, но не уничтожит саму строку =\
вобщем, буду удалять как предложил Vit... но не нравится мне что грид какой-то не доделаный в плане работы со строками и столбцами =) 

Автор: Palladin 28.6.2006, 14:32
Вот ты и займись доработкой гридаsmile))

А с другой стороны этот минус грида можно использовать для своих целей, может еомунить ненадо будет чтоб юзер видел что там за горизонтом... smile  

Автор: programast 28.6.2006, 15:52
да, наверное так и сделаю, что бы успокоиться =)) 

Автор: Palladin 28.6.2006, 19:26
Сорри за флуд, но кто такой Vit, многие постоянно говорят что мол буду делать как сказал Vit а зачастую в данном топике даже нет ниодного поста от Vit, ответье кто это, чтоб здесь ещё больше не распростронять флуд, скиньте ктонить в личку smile  

Автор: Демо 28.6.2006, 20:01
RooR, 
http://forum.vingrad.ru/index.php?showuser=777&nickname=Vit 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)