您的位置:首页 > 其它

[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>




图1TreePanel勾选



图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方法直接发送给服务器端方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: