Topic: Работа со строками в TGrid

Коллеги, у меня вопрос: каким образом вставить в таблицу строку ниже (выше) выделенной?
Собственно задумка у меня простая: хочу сделать возможность развернуть содержимое связанных таблиц в грид для легкого вывода его в Excel.

Re: Работа со строками в TGrid

Пример

procedure Form1_Button1_OnClick (Sender: TObject; var Cancel: boolean);
var
    i: integer;
begin
  i := Form1.TableGrid1.SelectedRow; // запоминаем выделенную строку
  Form1.TableGrid1.AddRow; // добавляем строку в конец
  Form1.TableGrid1.Cells[0,Form1.TableGrid1.RowCount-1] := 'My text'; // заполняем строку
  Form1.TableGrid1.Cells[1,Form1.TableGrid1.RowCount-1] := 'My text'; // заполняем строку
  if i < Form1.TableGrid1.RowCount then Form1.TableGrid1.MoveRow(Form1.TableGrid1.RowCount-1, i+1); // перемещаем строку ниже выделенной
end;
Dmitry.

Re: Работа со строками в TGrid

Спасибо!

И еще вопрос: как получить все id дочерних элементов выделенной строки в TreeView?

Re: Работа со строками в TGrid

procedure Form1_Button1_OnClick (Sender: TObject; var Cancel: boolean);
var
    i: integer;
begin
    i := Form1.TreeView1.GetFirstChild(Form1.TreeView1.SelectedRow);

    if i <> -1 then
    begin
        repeat
            ShowMessage('id: ' + IntToStr(Form1.TreeView1.dbIndexToID(i)));
            i := Form1.TreeView1.GetNextSibling(i);
        until i = -1;
    end;

end;
Dmitry.

Re: Работа со строками в TGrid

Дмитрий, подскажите пожалуйста как изменить данный скрипт чтобы он собирал id не по одному уровню вложений, а по всем (т.е. предполагаем что ветвлений может быть еще несколько)? Что-то сам не могу дойти до этого решения...

Re: Работа со строками в TGrid

indigen wrote:

Дмитрий, подскажите пожалуйста как изменить данный скрипт чтобы он собирал id не по одному уровню вложений, а по всем (т.е. предполагаем что ветвлений может быть еще несколько)? Что-то сам не могу дойти до этого решения...

Расположите на форме компонент Memo, в него будем выводить найденные элементы

procedure GetChildItems(ItemIndex: integer);
begin
    repeat
        if Form1.TreeView1.HasChildren(ItemIndex) then GetChildItems(Form1.TreeView1.GetFirstChild(ItemIndex)); // рекурсия

        Form1.Memo1.Lines.Add ('id: ' + IntToStr(Form1.TreeView1.dbIndexToID(ItemIndex)) + ' ' + Form1.TreeView1.Cells[0,ItemIndex]); // выводим id и текст в Memo
        ItemIndex := Form1.TreeView1.GetNextSibling(ItemIndex);
    until ItemIndex = -1;
end;


procedure Form1_Button1_OnClick (Sender: TObject; var Cancel: boolean);
begin
    Form1.Memo1.Clear;
    GetChildItems(Form1.TreeView1.GetFirstChild(Form1.TreeView1.SelectedRow));
end;
Dmitry.

7 (edited by indigen 2019-03-11 19:11:24)

Re: Работа со строками в TGrid

Дмитрий, подскажите, как поправить код что бы не вылетала ошибка при строении дерева как на картинке?

Post's attachments

Attachment icon Untitled-1.jpg 47.68 kb, 169 downloads since 2019-03-11 

Re: Работа со строками в TGrid

indigen wrote:

Дмитрий, подскажите, как поправить код что бы не вылетала ошибка при строении дерева как на картинке?

пожалуйста, приложите ваш проект и опишите шаги, которые приводят к ошибке, постараюсь помочь.

Dmitry.

Re: Работа со строками в TGrid

Проект с описанием ошибок на почте.

Re: Работа со строками в TGrid

Ошибка в строке 54

if frmMATList.tvView.HasChildren(ItemIndex) then Result:=Result+GetChildItems(frmMATList.tvView.GetFirstChild(ItemIndex)); //рекурсия 

должно быть

if frmMATList.tvView.HasChildren(ItemIndex) then Result:=Result+GetMatChildItems(frmMATList.tvView.GetFirstChild(ItemIndex)); //рекурсия
Dmitry.