[Ext.Net] 1.2.0_Ext.Net.TreePanel 勾选“纠结”发送给服务器端的方法
2012-09-14 15:55
441 查看
Ext.Net1.2.0_Ext.Net.TreePanel勾选“纠结”发送给服务器端的方法
本文内容
演示TreePanel勾选通过DirectMethods发送给服务器端方法说明
修改记录
演示TreePanel勾选通过DirectMethods发送给服务器端方法
本文演示Ext.Net通过前台脚本操作页面后,如何将数据“直接”发送给服务器端方法,从而摆脱之前ASP.NET时代(非Ajax)的思维模式。[code]<%@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">
protectedvoidPage_Load(objectsender,EventArgse)
{
if(!X.IsAjaxRequest)
{
this.BindTreePanel(this.TreePanel1.Root);
}
}
[DirectMethod]
publicstringGetSelectedNodes(stringnodes)
{
//TODO
returnnodes;
}
privatevoidBindTreePanel(Ext.Net.TreeNodeCollectionnodes)
{
DataTabledataSource=ExtNetInteractive.DS.GetDataSource();
Ext.Net.TreeNoderoot=newExt.Net.TreeNode();
root.NodeID="0";
root.Text="Root";
if(!dataSource.IsNull()&&dataSource.Rows.Count>0)
{
DataRow[]items=dataSource.Select("parentid='-1'");
if(items.Length>0)
{
DataSetds=newDataSet();
ds.Merge(items);
DataTableSourseTable=ds.Tables[0];
for(inti=0;i<SourseTable.Rows.Count;i++)
{
Ext.Net.TreeNodenode=newExt.Net.TreeNode();
node.NodeID=SourseTable.Rows[i]["id"].ToString();
node.Text=SourseTable.Rows[i]["name"].ToString();
node.Checked=Ext.Net.ThreeStateBool.False;
DataRow[]hasChild=dataSource.Select("parentid='"+SourseTable.Rows[i]["id"].ToString()+"'");
if(hasChild.Length>0)node.Icon=Icon.FolderGo;
elsenode.Icon=Icon.Table;
if(hasChild.Length<=0)node.Leaf=true;
elsenode.Leaf=false;
root.Nodes.Add(node);
BindTreePanel(node.Nodes,dataSource,SourseTable.Rows[i]["id"].ToString());
}
}
}
nodes.Add(root);
}
privatevoidBindTreePanel(Ext.Net.TreeNodeCollectionnodes,DataTableallData,stringparentID)
{
DataRow[]items=allData.Select("parentid='"+parentID+"'");
if(items.Length>0)
{
DataSetds=newDataSet();
ds.Merge(items);
DataTabledt=ds.Tables[0];
for(inti=0;i<dt.Rows.Count;i++)
{
Ext.Net.TreeNodenode=newExt.Net.TreeNode();
node.NodeID=dt.Rows[i]["id"].ToString();
node.Text=dt.Rows[i]["name"].ToString();
node.Checked=Ext.Net.ThreeStateBool.False;
DataRow[]hasChild=allData.Select("parentid='"+dt.Rows[i]["id"].ToString()+"'");
if(hasChild.Length>0)node.Icon=Icon.FolderGo;
elsenode.Icon=Icon.Table;
if(hasChild.Length<=0)node.Leaf=true;
elsenode.Leaf=false;
nodes.Add(node);
BindTreePanel(node.Nodes,allData,dt.Rows[i]["id"].ToString());
}
}
}</script>
<scripttype="text/javascript"defer="defer">
varcheckNodes=function(node,state){
vartree=node.getOwnerTree();
tree.suspendEvents();
if(node.parentNode!=null){
node.cascade(function(node){
node.attributes.checked=state;
node.ui.toggleCheck(state);
returntrue;
});
varpNode=node.parentNode;
while(pNode.id!="0"){
if(state){
pNode.ui.toggleCheck(state);
pNode.attributes.checked=state;
pNode=pNode.parentNode;
}
else{
varchk=false;
pNode.eachChild(function(child){
if(child.attributes.checked||child.getUI().isChecked())
chk=true;
});
pNode.ui.toggleCheck(chk);
pNode.attributes.checked=chk;
pNode=pNode.parentNode;
}
}
}
tree.resumeEvents();
};
vargetSelectedNodes=function(tree){
varmsg=[],
selNodes=tree.getChecked();
Ext.each(selNodes,function(node){
msg.push(node.text);
});
varselectedNodes=msg.join(",");
if(selectedNodes.length>0){
Ext.net.DirectMethods.GetSelectedNodes(selectedNodes,{
success:function(result){
Ext.Msg.alert('信息',result);
},
failure:function(result){
Ext.Msg.alert('信息',result);
}
});
}
else{
alert('未选择.');
}
};</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>
[/code]
图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动态生成