![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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;
|
|
#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;вот до кучи исходник может кому нибудь поможет тут загрузка/сохранение,вставка/удаление |