Jump to content

DBTreeGrid при выборе родительского узла, переход по DataSource.


OlegTimkiv

Recommended Posts

9 minutes ago, Sherzod said:

Здравствуйте,

Простите, можете уточнить Ваш вопрос?

Когда выбрали "Bahamas", dataset  должен установиться на первую запись (Nassau). Когда переходим по дочерним записям, работает нормально.   

DBTreeGrid.jpg

Link to comment
Share on other sites

1 hour ago, OlegTimkiv said:

Выбираю родительский узел. DataSource - не переходит на дочерний узел

Думаю, что это нормальное поведение, не так ли?

1 hour ago, OlegTimkiv said:

Как можно реализовать переход?

Т.е., Вы хотите перейти на первый дочерний узел, который не имеет дочернего узла... ?!

Link to comment
Share on other sites

Попробуйте следующий подход...:

1. UniDBTreeGrid -> ClientEvents -> ExtEvents -> function store.nodeexpand

function store.nodeexpand(sender, eOpts)
{
   var grid=this.grid, f;   
   if (sender.data.root==true) {return};
   
   sender.cascadeBy( function(){
        if (f) return false;
        
        if (!this.get("leaf")) {
            this.expand();
        } else {
            ajaxRequest(grid, "_sel", ["rec="+this.data[1]]);  // Индекс Вашего ключевого поля
            f=true; 
        } 
    }); 
}

2. UniDBTreeGrid -> OnAjaxEvent:

procedure TMainForm.UniDBTreeGrid1AjaxEvent(Sender: TComponent;
  EventName: string; Params: TUniStrings);
begin
  if EventName = '_sel' then
    TUniDBGrid(Sender).DataSource.DataSet.Locate('KeyField....', Params.Values['rec'], [])

end;

 

Link to comment
Share on other sites

17 hours ago, Sherzod said:

Попробуйте следующий подход...:

1. UniDBTreeGrid -> ClientEvents -> ExtEvents -> function store.nodeexpand


function store.nodeexpand(sender, eOpts)
{
   var grid=this.grid, f;   
   if (sender.data.root==true) {return};
   
   sender.cascadeBy( function(){
        if (f) return false;
        
        if (!this.get("leaf")) {
            this.expand();
        } else {
            ajaxRequest(grid, "_sel", ["rec="+this.data[1]]);  // Индекс Вашего ключевого поля
            f=true; 
        } 
    }); 
}

2. UniDBTreeGrid -> OnAjaxEvent:


procedure TMainForm.UniDBTreeGrid1AjaxEvent(Sender: TComponent;
  EventName: string; Params: TUniStrings);
begin
  if EventName = '_sel' then
    TUniDBGrid(Sender).DataSource.DataSet.Locate('KeyField....', Params.Values['rec'], [])

end;

 

Спасибо большое! Все работает.   

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...