[Ext.Net] 1.2.0_Ext.Net.TreePanel 勾选“纠结”发送给服务器端的方法
2012-09-14 15:55
656 查看
Ext.Net1.2.0_Ext.Net.TreePanel勾选“纠结”发送给服务器端的方法
本文内容
演示TreePanel勾选通过DirectMethods发送给服务器端方法说明
修改记录
演示TreePanel勾选通过DirectMethods发送给服务器端方法
本文演示Ext.Net通过前台脚本操作页面后,如何将数据“直接”发送给服务器端方法,从而摆脱之前ASP.NET时代(非Ajax)的思维模式。<%@PageLanguage="C#"%>
<%@RegisterAssembly="Ext.Net"Namespace="Ext.Net"TagPrefix="ext"%>
<%@RegisterAssembly="Ext.Net.Utilities"Namespace="Ext.Net.Utilities"TagPrefix="ext"%>
<%@ImportNamespace="System.Data"%>
<%@ImportNamespace="System.Collections"%>
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<htmlxmlns="http://www.w3.org/1999/xhtml">
<headrunat="server">
<title></title>
<scriptrunat="server">1:
2:protectedvoidPage_Load(objectsender,EventArgse)
3:{
4:if(!X.IsAjaxRequest)
5:{
6:this.BindTreePanel(this.TreePanel1.Root);
7:}
8:}
9:[DirectMethod]
10:publicstringGetSelectedNodes(stringnodes)
11:{
12://TODO
13:returnnodes;
14:}
15:privatevoidBindTreePanel(Ext.Net.TreeNodeCollectionnodes)
16:{
17:DataTabledataSource=ExtNetInteractive.DS.GetDataSource();
18:
19:Ext.Net.TreeNoderoot=newExt.Net.TreeNode();
20:root.NodeID="0";
21:root.Text="Root";
22:
23:if(!dataSource.IsNull()&&dataSource.Rows.Count>0)
24:{
25:DataRow[]items=dataSource.Select("parentid='-1'");
26:if(items.Length>0)
27:{
28:DataSetds=newDataSet();
29:ds.Merge(items);
30:DataTableSourseTable=ds.Tables[0];
31:
32:for(inti=0;i<SourseTable.Rows.Count;i++)
33:{
34:Ext.Net.TreeNodenode=newExt.Net.TreeNode();
35:node.NodeID=SourseTable.Rows[i]["id"].ToString();
36:node.Text=SourseTable.Rows[i]["name"].ToString();
37:node.Checked=Ext.Net.ThreeStateBool.False;
38:DataRow[]hasChild=dataSource.Select("parentid='"+SourseTable.Rows[i]["id"].ToString()+"'");
39:if(hasChild.Length>0)node.Icon=Icon.FolderGo;
40:elsenode.Icon=Icon.Table;
41:if(hasChild.Length<=0)node.Leaf=true;
42:elsenode.Leaf=false;
43:
44:root.Nodes.Add(node);
45:BindTreePanel(node.Nodes,dataSource,SourseTable.Rows[i]["id"].ToString());
46:}
47:}
48:}
49:nodes.Add(root);
50:}
51:privatevoidBindTreePanel(Ext.Net.TreeNodeCollectionnodes,DataTableallData,stringparentID)
52:{
53:DataRow[]items=allData.Select("parentid='"+parentID+"'");
54:
55:if(items.Length>0)
56:{
57:DataSetds=newDataSet();
58:ds.Merge(items);
59:DataTabledt=ds.Tables[0];
60:for(inti=0;i<dt.Rows.Count;i++)
61:{
62:Ext.Net.TreeNodenode=newExt.Net.TreeNode();
63:node.NodeID=dt.Rows[i]["id"].ToString();
64:node.Text=dt.Rows[i]["name"].ToString();
65:node.Checked=Ext.Net.ThreeStateBool.False;
66:DataRow[]hasChild=allData.Select("parentid='"+dt.Rows[i]["id"].ToString()+"'");
67:if(hasChild.Length>0)node.Icon=Icon.FolderGo;
68:elsenode.Icon=Icon.Table;
69:if(hasChild.Length<=0)node.Leaf=true;
70:elsenode.Leaf=false;
71:
72:nodes.Add(node);
73:BindTreePanel(node.Nodes,allData,dt.Rows[i]["id"].ToString());
74:}
75:}
76:}
77:</script>
1:
2:
3:<scripttype="text/javascript"defer="defer">
4:varcheckNodes=function(node,state){
5:vartree=node.getOwnerTree();
6:tree.suspendEvents();
7:if(node.parentNode!=null){
8:
9:node.cascade(function(node){
10:node.attributes.checked=state;
11:node.ui.toggleCheck(state);
12:returntrue;
13:});
14:varpNode=node.parentNode;
15:while(pNode.id!="0"){
16:if(state){
17:pNode.ui.toggleCheck(state);
18:pNode.attributes.checked=state;
19:pNode=pNode.parentNode;
20:}
21:else{
22:varchk=false;
23:pNode.eachChild(function(child){
24:if(child.attributes.checked||child.getUI().isChecked())
25:chk=true;
26:});
27:pNode.ui.toggleCheck(chk);
28:pNode.attributes.checked=chk;
29:pNode=pNode.parentNode;
30:}
31:}
32:}
33:tree.resumeEvents();
34:};
35:
36:vargetSelectedNodes=function(tree){
37:varmsg=[],
38:selNodes=tree.getChecked();
39:Ext.each(selNodes,function(node){
40:msg.push(node.text);
41:});
42:varselectedNodes=msg.join(",");
43:if(selectedNodes.length>0){
44:Ext.net.DirectMethods.GetSelectedNodes(selectedNodes,{
45:success:function(result){
46:Ext.Msg.alert('信息',result);
47:},
48:failure:function(result){
49:Ext.Msg.alert('信息',result);
50:}
51:});
52:}
53:else{
54:alert('未选择.');
55:}
56:};
57:</script>
</head>
<body>
<formid="form1"runat="server">
<ext:ResourceManagerID="ResourceManager1"runat="server"/>
<ext:TreePanelID="TreePanel1"runat="server"Icon="Accept"Height="300"Width="300"
RootVisible="false"UseArrows="true"AutoScroll="true"AutoDataBind="false">
<Root>
</Root>
<Listeners>
<CheckChangeHandler="checkNodes(node,checked);"/>
</Listeners>
<SelectionModel>
<ext:MultiSelectionModelID="MultiSelectionModel1"runat="server">
</ext:MultiSelectionModel>
</SelectionModel>
</ext:TreePanel>
<ext:ButtonID="Button1"runat="server"Text="获得勾选节点">
<Listeners>
<ClickHandler="getSelectedNodes(#{TreePanel1});"/>
</Listeners>
</ext:Button>
</form>
</body>
</html>
图2回调
说明
脚本函数checkNodes用于在客户端勾选树的节点;脚本函数getSelectedNodes用于获得勾选的树的节点text(也可以是id——node.id),并发送给服务器端;
服务器端方法BindTreePanel用于构造TreePanel。
最开始,习惯于将客户端操作保存到页面的隐藏域,也就是说,针对这个例子,我们可以将勾选的节点text保存到Ext.Net.Hidden里,然后在服务器端读取hidden。如下所示:
vargetSelectedNodes=function(tree,obj){
varmsg=[],
selNodes=tree.getChecked();
Ext.each(selNodes,function(node){
msg.push(node.id);
});
obj.setValue(msg.join(",");
returntrue;
};
但这不是Ext.Net期望我们的实现方式,它期望我们,通过Ext.net.DirectMethods方法直接发送给服务器端方法。
相关文章推荐
- Ext.Net 1.2.0_Ext.Net.TreePanel 勾选“纠结”发送给服务器端的方法
- [Ext.Net] 1.2.0_Ext.Net.TreePanel 勾选“纠结”发送给服务器端的方法
- asp.net ext treepanel 动态加载XML的实现方法
- Ext.Net 1.2.0_在程序集中自定义 TreePanel 控件,并用反射动态获得数据源
- asp.net ext treepanel 动态加载XML的实现方法
- [Ext.Net] 1.2.0_在程序集中自定义 TreePanel 控件
- Ext.Net 1.2.0_在 Web 应用程序中自定义 TreePanel 控件
- Ext.Net 1.2.0_在程序集中自定义 TreePanel 控件
- [Ext.Net] 1.2.0_在程序集中自定义 TreePanel 控件
- Ext treePanel方法属性
- [Ext.Net]TreePanel自定义图标
- ext.net TreePanel单击取值
- EXT.NET TreePanel获取选中节点
- EXT.NET 使用总结(2) ---TreePanel(带右键菜单,节点自定义属性)
- [Ext.Net]TreePanel+gridPanel实例
- 关于 ExtAspNet 控件 Tree 嵌套在 Region Panel 内 OnNodeCommand 无响应的问题解决方法
- Ext.net TreePanel的Checkbox操作及父子联动
- asp.net ext treepanel 动态加载XML
- [Ext.Net]TreePanel+gridPanel实例
- Ext.net中TreePanel动态生成