EasyUI Forum
November 06, 2025, 04:36:53 PM *
Welcome, Guest. Please login or register.

Login with username, password and session length
News:
 
   Home   Help Search Login Register  
Pages: [1]
  Print  
Author Topic: TreeGrid from Table  (Read 20836 times)
ClSoft
Jr. Member
**
Posts: 92


View Profile
« on: January 08, 2013, 02:42:43 PM »

Hi all
I saw this example:
http://www.jeasyui.com/demo/datagrid/transform.html
(datagrid from table)
I wonder is that possible for TreeGrid?

This is what I try, but it does not work:
Code:
<body>
<table class="easyui-treegrid" style="width:750px;height:500px" idField="id" treeField="name1" >
<thead>
<tr>
          <th field="id" width="50">id</th> 
          <th field="name1" width="50">Size</th> 
          <th field="name2" width="50">Modified Date</th> 
          <th field="name3" width="50">Name</th> 
          <th field="name4" width="50">Size</th> 
          <th field="name5" width="50">Modified Date</th> 
</tr>                         
</thead>                           
<tbody>                           
<tr>                           
<td>1</td>           
<td>Data 2</td>           
<td>Data 3</td>           
<td>Data 4</td>           
<td>Data 5</td>           
<td>Data 6</td>           
</tr>                         
<tr>                           
<td>2</td>           
<td>Data 2</td>           
<td>Data 3</td>           
<td>Data 4</td>           
<td>Data 5</td>           
<td>Data 6</td>           
</tr>                         
</tbody>                           
</table>

</body>

Thanks for your answer(s).
Logged
ClSoft
Jr. Member
**
Posts: 92


View Profile
« Reply #1 on: January 09, 2013, 12:36:42 PM »

Anybody? Please?
Logged
stworthy
Administrator
Hero Member
*****
Posts: 3581


View Profile Email
« Reply #2 on: January 09, 2013, 07:17:54 PM »

A solution to solve this issue is to extend the view object to support this feature.
Code:
(function($){
var oldOnBeforeRender = $.fn.treegrid.defaults.view.onBeforeRender;
window.tview = $.extend($.fn.treegrid.defaults.view, {
onBeforeRender: function(target, parentId, data){
if ($.isArray(parentId)){
data = {total:parentId.length,rows:parentId};
oldOnBeforeRender.call(this, target, null, data);
} else {
oldOnBeforeRender.call(this, target, parentId, data);
}
}
});
})(jQuery);

Apply the 'tview' to treegrid component.
Code:
<table class="easyui-treegrid" style="width:750px;height:500px"
data-options="
idField: 'id',
treeField: 'name3',
view: tview
">
<thead>
<tr>
  <th field="id" width="50">id</th> 
  <th field="_parentId" width="50">pid</th> 
  <th field="name1" width="50">Size</th> 
  <th field="name2" width="50">Modified Date</th> 
  <th field="name3" width="150">Name</th> 
  <th field="name4" width="50">Size</th> 
  <th field="name5" width="50">Modified Date</th> 
</tr>                         
</thead>                           
<tbody>                           
<tr>                           
<td>1</td>           
<td></td>           
<td>Data 2</td>           
<td>Data 3</td>           
<td>Data 4</td>           
<td>Data 5</td>           
<td>Data 6</td>           
</tr>                         
<tr>                           
<td>2</td>           
<td>1</td>           
<td>Data 2</td>           
<td>Data 3</td>           
<td>Data 4</td>           
<td>Data 5</td>           
<td>Data 6</td>           
</tr>                         
</tbody>                           
</table>
Logged
ClSoft
Jr. Member
**
Posts: 92


View Profile
« Reply #3 on: January 10, 2013, 08:04:51 AM »

That look's great - thanks a lot!
What do you mean - will that display data faster as using json file?
I can create json file on disk and display them, or I can create such html and run them. I can not use php to display data.
Thanks.
« Last Edit: January 10, 2013, 08:10:16 AM by Clarion » Logged
ClSoft
Jr. Member
**
Posts: 92


View Profile
« Reply #4 on: January 16, 2013, 02:24:20 PM »

Hi
is it possible to assign a icon to each node?
thanks!
Logged
ClSoft
Jr. Member
**
Posts: 92


View Profile
« Reply #5 on: January 21, 2013, 01:05:04 PM »

Please?
Logged
stworthy
Administrator
Hero Member
*****
Posts: 3581


View Profile Email
« Reply #6 on: January 22, 2013, 12:36:16 AM »

To enable the treegrid parsing 'iconCls' property from each <tr> element, you need to override the treegrid view.
Code:
(function($){
var oldOnBeforeRender = $.fn.treegrid.defaults.view.onBeforeRender;
window.tview = $.extend($.fn.treegrid.defaults.view, {
onBeforeRender: function(target, parentId, data){
if ($.isArray(parentId)){
data = parseGridData(target);
oldOnBeforeRender.call(this, target, null, data);
} else {
oldOnBeforeRender.call(this, target, parentId, data);
}
}
});

function parseGridData(target){
var data = {
total:0,
rows:[]
};
var fields = $(target).datagrid('getColumnFields',true).concat($(target).datagrid('getColumnFields',false));
$(target).find('tbody tr').each(function(){
data.total++;
var row = {};
$.extend(row, $.parser.parseOptions(this,['iconCls','state']));
for(var i=0; i<fields.length; i++){
var field = fields[i];
var td = $(this).find('td:eq('+i+')');
row[field] = td.html();
}
data.rows.push(row);
});
return data;
}
})(jQuery);

Code:
<table class="easyui-treegrid" style="width:750px;height:500px"
data-options="
idField: 'id',
treeField: 'name3',
view: tview
">
<thead>
<tr>
  <th field="id" width="50">id</th> 
  <th field="_parentId" width="50">pid</th> 
  <th field="name1" width="50">Size</th> 
  <th field="name2" width="50">Modified Date</th> 
  <th field="name3" width="150">Name</th> 
  <th field="name4" width="50">Size</th> 
  <th field="name5" width="50">Modified Date</th> 
</tr>                         
</thead>                           
<tbody>                           
<tr data-options="iconCls:'icon-ok'">                           
<td>1</td>           
<td></td>           
<td>Data 2</td>           
<td>Data 3</td>           
<td>Data 4</td>           
<td>Data 5</td>           
<td>Data 6</td>           
</tr>                         
<tr>                           
<td>2</td>           
<td>1</td>           
<td>Data 2</td>           
<td>Data 3</td>           
<td>Data 4</td>           
<td>Data 5</td>           
<td>Data 6</td>           
</tr>                         
</tbody>                           
</table>
Logged
ClSoft
Jr. Member
**
Posts: 92


View Profile
« Reply #7 on: January 22, 2013, 04:05:39 AM »

Thanks a lot, you are the master!  Grin
Logged
Pages: [1]
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.18 | SMF © 2013, Simple Machines Valid XHTML 1.0! Valid CSS!