![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() оброго времени суток!!!
Помогите разобраться с удалением и вставкой в StringGid. Необходимо чтобы можно было вставить и удалить строку в нужном месте. вот мой вариант удаления строки: Код:
procedure TForm1.Button_delClick(Sender: TObject); var i,j: Integer; begin j:=StringGrid1.Row; // строка с выделением StringGrid1.Rows[j].Clear; for i:=j to StringGrid1.RowCount-2 do StringGrid1.Rows[i].Assign(StringGrid1.Rows[i+1]); StringGrid1.RowCount:=StringGrid1.RowCount-1; end; Удаление в нужном месте получилось, вот только если начинаешь удалять все записи по очереди и дело подходит к фиксированной строке с наименованием столбцов, фиксированную строку удаляет тоже. подскажите ка сделать что бы не удалялась фиксированная строка. А с вставкой строки в нужном месте вообще в голову нечего кроме стандартной вставки не приходит. Господа профессиональные программисты помогите новичку в этом поприще. прилагаю исходник |
#2
|
|||
|
|||
![]() Надо та немного логически пошаманить. Держи исправленную процу:
Код:
procedure TForm1.Button_delClick(Sender: TObject); var i,j: Integer; begin j:=StringGrid1.Row; if (j = 1) and (StringGrid1.RowCount <= 2) then begin with StringGrid1 do for i:= 0 to ColCount - 1 do Cells[i, j]:= ''; exit; // не удаляем последнюю строку чтобы не потерять фиксированной end; StringGrid1.Rows[j].Clear; for i:=j to StringGrid1.RowCount-2 do StringGrid1.Rows[i].Assign(StringGrid1.Rows[i+1]); StringGrid1.RowCount:=StringGrid1.RowCount-1; end; APPLICATION.TERMINATOR |
#3
|
|||
|
|||
![]() спасибо огромное!!!
![]() плиз! Если не трудно подкиньте идею по вставке строки в нужном месте. |
#4
|
|||
|
|||
![]() мне предложили такой вариант:
Код:
procedure SGInsertRow(SG: TStringGrid; NewRow: Integer); var i: Integer; begin if NewRow < 0 then NewRow := 0; // либо 1, задайте нужное вам поведение with SG do begin RowCount := RowCount + 1; if NewRow < RowCount - 1 then begin for i := RowCount - 1 downto NewRow + 1 do Rows[i].Assign(Rows[i - 1]); end; Rows[NewRow].Clear; end; end; procedure TForm1.Button_insClick(Sender: TObject); begin SGInsertRow(StringGrid1,2); end; только он вставляет во вторую строку, а мне надо над или под выделенной строкой может у кого есть варианты Последний раз редактировалось konsul_81, 02.05.2010 в 21:08. |
#5
|
|||
|
|||
![]() вот переправленный вариант:
Код:
procedure SGInsertRow(SG: TStringGrid; NewRow: Integer); var i: Integer; begin if NewRow < 0 then NewRow := 0; // либо 1, задайте нужное вам поведение with SG do begin RowCount := RowCount + 1; if NewRow < RowCount - 1 then begin for i := RowCount - 1 downto NewRow + 1 do Rows[i].Assign(Rows[i - 1]); end; Rows[NewRow].Clear; end; end; procedure TForm1.Button_insClick(Sender: TObject); begin SGInsertRow(StringGrid1,StringGrid1.Row); //Вставляет перед выделенной ячейкой // SGInsertRow(StringGrid1,StringGrid1.Row + 1); //Вставляет после выделенной ячейки end; вот до кучи исходник может кому нибудь поможет тут загрузка/сохранение,вставка/удаление |