EasyUI Forum

General Category => EasyUI for jQuery => Topic started by: ClSoft on January 08, 2013, 02:42:43 PM



Title: TreeGrid from Table
Post by: ClSoft 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).


Title: Re: TreeGrid from Table
Post by: ClSoft on January 09, 2013, 12:36:42 PM
Anybody? Please?


Title: Re: TreeGrid from Table
Post by: stworthy 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>


Title: Re: TreeGrid from Table
Post by: ClSoft 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.


Title: Re: TreeGrid from Table
Post by: ClSoft on January 16, 2013, 02:24:20 PM
Hi
is it possible to assign a icon to each node?
thanks!


Title: Re: TreeGrid from Table
Post by: ClSoft on January 21, 2013, 01:05:04 PM
Please?


Title: Re: TreeGrid from Table
Post by: stworthy 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>


Title: Re: TreeGrid from Table
Post by: ClSoft on January 22, 2013, 04:05:39 AM
Thanks a lot, you are the master!  ;D