How to know the parent?
We are using the EjsDataManager with an URL to a web service. We get into the web service but we need to know which tree node we are
to provide the children for. How do we get at this information? We now return children and they get inserted but as we do not know where the children
will be inserted the tree gets very big. We need to know the ID of the parent which we provide children for, how?
to provide the children for. How do we get at this information? We now return children and they get inserted but as we do not know where the children
will be inserted the tree gets very big. We need to know the ID of the parent which we provide children for, how?
SIGN IN To post a reply.
4 Replies
KM
Kanagambigai Murugan
Syncfusion Team
July 17, 2019 12:54 PM UTC
Hi Mikael,
Greetings from Syncfusion.
Query: We get into the web service but we need to know which tree node we are to provide the children for. How do we get at this information?
Based on your information, we have prepared a simple sample for rendering Treeview with URL adaptor. If you want to expand a particular node at initial time itself, you need to set the expanded property as true in the dataSource. It will automatically fetch the child data at rendering time. And also, you can get the requested ParentID using the below code snippet.
// Server side
|
List<loadondemand> treeData = GetTreeData();
IEnumerable<loadondemand> results;
if (dm.Where == null)
{
//return the first level nodes
results = treeData.Where(item => item.pid == null);
}
else
{
//return the nodes which has pid as we request
results = treeData.Where(s => s.pid == Convert.ToInt32(dm.Where[0].value));
}
return results;
} |
// Client side
|
<EjsTreeView ID="tree">
<TreeViewFieldsSettings Query="new ej.data.Query()" Id="nodeId" Text="nodeText" HasChildren="hasChild" ParentID="pid" Expanded="expanded">
<EjsDataManager Url="/api/Default" Adaptor="Adaptors.UrlAdaptor" CrossDomain="true"></EjsDataManager>
</TreeViewFieldsSettings>
</EjsTreeView> |
Sample: https://www.syncfusion.com/downloads/support/directtrac/145980/ze/TreeView-1110815601-1533716049
Please check the above sample and let us know if you need any further assistance or if we misunderstood your query.
Regards,
Kanagambigai M.
MI
MikeR
July 17, 2019 09:50 PM UTC
Thanks Kanagambigai,
This was a great step forward, I would also like to pass the parent id of the first node that should be loaded/expanded.
I tried this code below, but I cant get hold of the parameter in the controller.
How can I send a parent ID with the first Query(when no tree is available in the client)
<EjsTreeView id="tree">
<TreeViewFieldsSettings Query= "new ej.data.Query().addParams('ParID', '12345')" Id="EmployeeID" Text="FirstName" HasChildren="HasChildren" ParentID="ParentID">
<EjsDataManager url="api/Structure" Adaptor="Adaptors.UrlAdaptor" CrossDomain="true"></EjsDataManager>
<TreeViewFieldChild Query= "new ej.data.Query()" Id="EmployeeID" Text="FirstName" HasChildren="HasChildren" ParentID="ParentID" Expanded="expanded">
<EjsDataManager url="api/Structure" Adaptor="Adaptors.UrlAdaptor" CrossDomain="true" ></EjsDataManager>
</TreeViewFieldChild>
</TreeViewFieldsSettings>
</EjsTreeView>
/Mike
KM
Kanagambigai Murugan
Syncfusion Team
July 18, 2019 11:45 AM UTC
Hi Mikael,
Thanks for your update.
Query: How can I send a parent ID with the first Query(when no tree is available in the client)
You can pass the parentID as an additional parameter along with the Query using the addParams method on the client-side. On the server-side, you have to define this additional parameter. Please refer to the following code snippet.
//Client side
|
<EjsTreeView ID="tree">
<TreeViewFieldsSettings Query="new ej.data.Query().addParams('ParentID','5')" Id="employeeID" Text="firstName" HasChildren="employeeID">
<EjsDataManager Url="/api/Default" Adaptor="Adaptors.UrlAdaptor" CrossDomain="true"></EjsDataManager>
<TreeViewFieldChild Id="orderID" Text="customerID" ParentID="employeeID" Expanded="expanded">
<EjsDataManager Url="api/Child" Adaptor="Adaptors.UrlAdaptor" CrossDomain="true"></EjsDataManager>
</TreeViewFieldChild>
</TreeViewFieldsSettings>
</EjsTreeView> |
// server side
|
// Extends the DataManager
public class CustomClass : DataManagerRequest
{
public CustomParams Params { get; set; }
}
// Definition for the additional parameter
public class CustomParams
{
public int ParentID { get; set; }
}
[HttpPost]
public object Post([FromBody]CustomClass dm)
{
BindDataSource();
var data = order.AsQueryable();
var count = order.Count;
var queryString = dm.Params.ParentID;
if (dm.Where == null)
{
int top = Convert.ToInt32(queryString);
results = data.Where(s => s.EmployeeID == top);
}
return results;
} |
In the above sample, we have passed the id as ‘5’, which will get loaded first.
Kindly check the above sample and get back to us if you need any further assistance.
Regards,
Kanagambigai M.
MI
MikeR
July 18, 2019 09:06 PM UTC
Thanks Kanagambigai,
This works great!
SIGN IN To post a reply.
- 4 Replies
- 2 Participants
-
MI MikeR
- Jul 16, 2019 02:33 PM UTC
- Jul 18, 2019 09:06 PM UTC