[英]load a tree : ExtJs - Jayrock
im trying to build a treepanel (or just a simple tree i just need it to work) and load it with data from database 我试图建立一个treepanel(或者只是一个简单的树,我只需要它来工作)并用数据库中的数据加载它
here is my code to build the tree 这是我建立树的代码
var objHandler = new Interact();
var treestore = new Ext.data.TreeStore ( {
root:{
id:'root_node',
nodeType:'async',
text:'Root'
},
proxy:{
type:'ajax',
url:'myUrl'
}
});
function ReadTree() {
try {
objHandler.ReadAssets(function (serverResponse) {
if (serverResponse.error == null) {
var result = serverResponse.result;
if (result.length > 2) {
treestore.load(Ext.decode(result));//TreeStore does not inherit from Ext.data.Store and thus does not have a loadData method. Both TreeStore and Store inherit from Ext.data.AbstractStore which defines a load method only. Therefore TreeStore has a load method
}
}
else {
alert(serverResponse.error.message);
}
}); //eo serverResponse
} //eo try
catch (e) {
alert(e.message);
}
}
var AssetTree = Ext.create('Ext.tree.Panel', {
title: 'Asset Tree',
width: 200,
height: 150,
store: treestore,
// loader: new Ext.tree.TreeLoader({ url: 'myurl' }),
columns: [
{ xtype: 'treecolumn',text : 'First Name', dataIndex :'Title'}/*,
{text : 'Last', dataIndex :'Adress'},
{text : 'Hired Month', dataIndex :'Description'}*/
],
autoscroll : true
});
ReadTree();
im using jayrock : http://code.google.com/p/jayrock/ 我正在使用jayrock: http : //code.google.com/p/jayrock/
Interact.ashx.cs : Interact.ashx.cs:
public class Interact : JsonRpcHandler { 公共类Interact:JsonRpcHandler {
[JsonRpcMethod()]
public string ReadAssets()
{
// Make calls to DB or your custom assembly in project and return the result in JSON format. //This part is making custom assembly calls.
clsDBInteract objDBInteract = new clsDBInteract();
string result;
try
{
result = objDBInteract.FetchAssetsJSON();
}
catch (Exception ex)
{
throw ex;
}
return result;
}
clsDBInteract.cs : clsDBInteract.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Data.Sql;
using System.Data.SqlClient;
using Extensions;
namespace WebBrowser
{
public class clsDBInteract
{
SqlConnection dbConn = new SqlConnection("server=***********; user id = *****; password = ******; Database=*******");
/////// data to fill assets grid
public DataSet FetchAssetsDS()
{
DataSet ds = new DataSet();
try
{
SqlCommand sqlCommand = new SqlCommand("select Title, adress, Description from table");
sqlCommand.Connection = dbConn;
sqlCommand.CommandType = CommandType.Text;
SqlDataAdapter sda = new SqlDataAdapter(sqlCommand);
dbConn.Open();
sda.Fill(ds);
if (sqlCommand.Connection.State == ConnectionState.Open)
{
dbConn.Close();
}
//ds = sqlCommand.ExecuteNonQuery();
}
catch (Exception ex)
{
throw ex;
}
return ds;
}//eo FetchAssetsDS
public string FetchAssetsJSON()
{
string result = string.Empty;
try
{
DataSet ds = FetchAssetsDS();
result = ds.ToJSONString(); // This method will convert the contents on Dataset to JSON format;
}
catch (Exception ex)
{
throw ex;
}
return result;
}//eo FetchAssetsJSON
}//eo clsDBInteract
}
I dont have any error, but the panel is empty, i tested and i can read the data in the readtree function..so i guess the problem would be in the store maybe or the loading 我没有任何错误,但是面板为空,我进行了测试,并且我可以在readtree函数中读取数据。所以我想问题可能出在商店中,或者是装载中
its been more than two weeks that im trying to pull this off any help would be appreciated 我已经尝试了两个多星期了,希望能帮上忙,不胜感激
PS: im using ExtJs4 with c# .net PS:我在C#.net中使用ExtJs4
thanks 谢谢
You havent given a url
for the store to get the data from 您尚未提供商店的
url
以从中获取数据
proxy: {
url:'myurl',
type: 'memory',
reader: {
type: 'json',
root: 'users'
}
}
I would recommend looking at the response in firebug to see if the data structure being returned is valid JSON 我建议查看Firebug中的响应,以查看返回的数据结构是否为有效JSON
EDIT This is how I would build the create the Tree assuming the JSON is valid for a tree (not just valid JSON) 编辑这是我将如何构建创建树,假设JSON对树有效(而不仅仅是有效JSON)
Ext.create('Ext.tree.Panel', {
rootVisible:false,
store:Ext.create('Ext.data.TreeStore', {
root:{
id:'root_node',
nodeType:'async',
text:'Root'
},
proxy:{
type:'ajax',
url:'yourUrl'
}
})
});
i solved this by creating my own type (no jayrock) 我通过创建自己的类型解决了这个问题(没有jayrock)
my tree model and store: 我的树模型和存储:
Ext.define('TreeModel', {
extend: 'Ext.data.Model',
fields: [
{ name: 'text' },
{ name: 'id' },
{ name: 'descr' }
]
});
window.TreeStore = Ext.create('Ext.data.TreeStore', {
model: 'TreeModel',
root: Ext.decode(obj.TreeToJson()),
proxy: {
type: 'ajax'
},
sorters: [{
property: 'leaf',
direction: 'ASC'
}, {
property: 'text',
direction: 'ASC'
}]
});
my class: 我的课:
public class TreeItem
{
public string text { get; set; }
public int id { get; set; }
public string descr { get; set; }
public string expanded { get; set; }
public string leaf { get; set; }
public List<TreeItem> children { get; set; }
}
then i get my data and fill my tree like this 然后我得到我的数据并像这样填满我的树
public string TreeToJson()
{
List<TreeItem> child = new List<TreeItem>();
for (int i = 0; i < n; i++)
{
child.Add(new TreeItem() { text = t.AssetTree()[i].Item1, id = t.AssetTree()[i].Item2, ip = t.AssetTree()[i].Item3, descr = t.AssetTree()[i].Item4, expanded = "false", leaf = "true" });
}
TreeItem tree = new TreeItem() { text = "my root", id = 0, expanded = "true", leaf = "false", children = child };
}
hope it helps someone 希望对别人有帮助
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.