DevExpress中带复选框的树形结构构到底在哪儿

没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!当前位置: >>
DevExpress TreeList使用心得
DevExpress Asp.net(1) AspxButton 的客户端操作javascript 调用父窗口(父页面)的方法 window.parent 与 window.opener 的区别 javascript 调用主窗口方法 1: 2: window.parent 是 iframe 页面调用父页面对象 window.opener 是 window.open 打开的子页面调用父页面对象具体例子就不写了。 DevExpress.Web 控件中的 AspxButton 的客户端验证 我们在用.net 默认的 AspButton 做面页提交时,如果需要客户端验证,我们一 般要 这么写就可以,如下:[xhtml] view plaincopyprint?1. &asp:Button ID=&btnSubmit& runat=&server& Text=&提交 & OnClientClick=&return btnClick();& /&如果验证没能通过,在 JS 函数 validate 中直接 return false 就可以了,但 AspxButton 可不行, 费了好大的劲才找到合适的方法,如下:[xhtml] view plaincopyprint?1. &dxe:ASPxButton ID=&btnSubmit& runat=&server& ClientInstanceName=&btnClie ntSubmit& 2. 3. Text=&提交&& &ClientSideEvents Click=&function validate(s, e) {4. 5. 6. 7. 8. 9. 10.if (txtMemo.GetText() == '') { alert('请输入有效的值!'); e.processOnServer = } }& /& &/dxe:ASPxButton& 在这个事件中,有一个非常重要的属性就是 processOnServer,通过设置此属性 的值(true/false),就可以让 AspxButton 是否执行其在服务器端的事件程序。 详细说明 processOnServer: true:处理在服务器端事件; false:处理在客户端事件。 备注 e.processOnServer=false 获取或设置一个值,程序是否在服务器端执行。 也可以这么说:如果控件有 AutoPostBack 属性,那么就可以使用 e.processOnServer 以控制代码的 执行是在客户端还是在服务器端。但 processOnServer 最终取决于 AutoPostBack 属性,如果控件 AutoPostBack =&false&,那么 processOnServer 属性值将不起任何作用。DevExpress Asp.net(3) ASPxCallback 组件ASPxCallback 控件简单来的来说是一个数据回调控件,即不刷新事个页面来展现数据,主要是通 过注册客户端事件与服务器端的事件来相互通信完成任务。 如何使用 ASPXCallback: 1. 向页面添加 CallBack 组件,并设置 ClientInstanceName 属性(客户端标识,如 ClientInstanceName=&Callback1&)。 2. 注册 CallBack 组件的服务器端事件 ASPxCallback_Callback,这个方法就是客户端将要调用 的服务器端的处理程序。 3. 注册 CallBack 组件的 CallbackComplete 事件,用来处理回调完之后的操作,并可通过参 数 e 获取 parameter 和设置返回的 result 的值。 4. 在客户端用户 CallBack 组件的客户端方法 PerformCallback 方法,以调用服务器端的 ASPxCallback_Callback 事件。 代码:Callback1.PerformCallback(id) 5. CallBack 组件自动调用 CallbackComplete 事件,完成此次操作。 下面这个例子将说明如何通过客户端启用服务器端的方法来更新 DIV 中的数据。 HTML 代码, 三个 DIV, 每个 DIV 分别有一个&a/&标签, 通过调用 Javascript 函数 ShowDetails 来更新 DIV 的内容, 其中参数为 Div ID 的最后一个数字。ASPxCallback 组件同时注册服务 器的 OnCallback 事件,用来处理回调时处理,ClientSideEvents 的 CallbackComplete 方 法当回调完成时将自动调用。[xhtml] view plaincopyprint?1. &div id=&Detail1&& 2. &a href=&javascript:ShowDetails('1');& mce_href=&javascript:ShowD etails('1');&&Show Detail&/a& 3. 4. 5. &/div& &div id=&Detail2&& &a href=&javascript:ShowDetails('2');& mce_href=&javascript:ShowD etails('2');&&Show Detail&/a& 6. 7. 8. &/div& &div id=&Detail3&& &a href=&javascript:ShowDetails('3');& mce_href=&javascript:ShowD etails('3');&&Show Detail&/a& 9. 10. 11. &dxcb:ASPxCallback ID=&ASPxCallback1& runat=&server& ClientInstanceNa me=&Callback1& 12. 13. 14. 15. 16. 17. 18. 19. &!-20. ------------------------------------------------21. CallbackComplete 方法原型: OnCallback=&ASPxCallback1_Callback&& &ClientSideEvents CallbackComplete=&function(s, e) { var element = GetDetailsContainer(e.parameter); element.innerHTML = e. }& /& &/dxcb:ASPxCallback& &/div& 22. function ASPxClientCallbackCompleteEventHandler( 23. 24. source : object, e : ASPxClientCallbackCompleteEventArgs25. ) : V 26. parameter:获取 AspxCallBack 进行回调的参数值。 27. result:获取回调之后的结果值。 28. 29. 这个方法会在回调完成之后自动的调用。 30. -----------------------------------------------31. --&JS,通过 Callback1.PerformCallback(id)调用服务器的 OnCallback 事件:[javascript] view plaincopyprint?1. 2. 3. 4. 5. 6. 7. 8.&mce:script type=&text/javascript&&&!-function GetDetailsContainer(id) { return document.getElementById(&Detail& + id.toString()); } function ShowDetails(id) {GetDetailsContainer(id).innerHTML = &Loading&&; Callback1.PerformCallback(id); Callback 方法。 //回调方法,将调用服务器端注册的9. 10. 11. 12. 13. 14.}/* ------------------------------------Callback1.PerformCallback(parameter); PerformCallback 方法会调用 Callback1 服务器端的 ASPxCallback1_Callback()方法,以完成和服务器15.端的通信。所以在服务器端一定要注册 ASPxCallback1_Callback 方法,以完成 指定的操作。16.同时,PerformCallback()中的参数可有可无,类型为 string,当有参数时,服 务器端可通过 ASPxCallback1_Callback() 17.中的 ( CallbackEventArgs e) e.Parameter 来获得, 并通过 e.Result 参数返 回结果值。18. 19. 20. 21.此时, 就可以通过执行 Client 端的 CallbackComplete 方法来获取执行的方法。总结: 1 向页面添加 CallBack 组件,并设置 ClientInstanceName 属性(客户端标识, 如 ClientInstanceName=&Callback1&)。22. 23.2 注册 CallBack 组件的服务器端事件 ASPxCallback_Callback。 3 注册 CallBack 组件的 CallbackComplete 事件,用来处理回调完之后的操作, 并可通过参数 e 获取 parameter 和 result 的值。24.4 在客户端用户 CallBack 组件的客户端方法 PerformCallback 方法,以调用服 务器端的 ASPxCallback_Callback 事件。25. 26. 27.代码:Callback1.PerformCallback(id) 5 CallBack 组件自动调用 CallbackComplete 事件,完成此次操作。 */28. // --&&/mce:script&C#,在 OnCallback 事件中接受客户端传递过来的参数,以进行判断是更新的哪一个 DIV, 并通过 e.Result 返回处理后的结果:[c-sharp] view plaincopyprint?1. protected void ASPxCallback1_Callback(object source, CallbackEventArgs e)2. 3. 4. 5. 6. &; 7. 8. 9.{ switch (e.Parameter) { case &1&: e.Result = &WCF 分布式开发步步为赢(1):WCF 分布式框架基础概念 case &2&: e.Result = &WCF 分布式开发步步为赢(2)自定义托管宿主 WCF 解决方案 开发配置过程详解&;10. 11. case &3&: 12. 编程开发&; 13. 14. 15. } }e.Result = &WCF 分布式开发步步为赢(3)WCF 服务元数据交换、配置及DevExpress Asp.net(4) ASPxCallbackPanel 的基本使用下面这个例子就是通过一个 ListBox,从客户端回调 AspxCallbackPanel,从而更新 AspxCallbackPanel 内的 MultiView 控件显示信息。首选,先在页面中放置一个 AspxCallbackPanel 控件,并设置 ClientInstanceName 属性为 “CallbackPanel”。 代码如下:[xhtml] view plaincopyprint?1. dxcp:ASPxCallbackPanel ID=&ASPxCallbackPanel& runat=&server& ClientInstan ceName=&CallbackPanel& 2. OnCallback=&ASPxCallbackPanel_Callback& Width=&100%&&3. &/dxcp:ASPxCallbackPanel&接下来再放置一个 MultiView 控件,设置多个 View,让他显示不同的内容,注意,MultiView 是 放置在 ASPCallbackPane 的&PanelCollection&中,如代码所示:[xhtml] view plaincopyprint?1. &dxcp:ASPxCallbackPanel ID=&ASPxCallbackPanel& runat=&server& ClientInsta nceName=&CallbackPanel& 2. OnCallback=&ASPxCallbackPanel_Callback& Width=&100%&&3. 4. && 5.&PanelCollection& &dxp:PanelContent ID=&PanelContent2& runat=&server&asp:MultiView ID=&MultiView& runat=&server&&6.&asp:View ID=&View1& runat=&server&& 7. 8. 9. 10.&table& &tr& &td valign=&top&& &dxe:ASPxLabel ID=&ASPxLab el1& runat=&server& Text=&?我是谁?不要告诉我是上班族, 现在的上班族太民工; 不要 告诉我是民工,现在民工太缺钱;不要告诉我是富翁,富翁大都是暴发户;不要告诉我是暴 发户,暴发户都想当明星;不要告诉我是明星,现在明星就像上班族。&11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.Font-Bold=&True&& &/dxe:ASPxLabel& &/td& &/tr& &/table& &/asp:View& &asp:View ID=&View2& runat=&server&& &table& &tr& &td valign=&top&& &dxe:ASPxLabel ID=&ASPxLab el3& runat=&server& Text=&?许多人不知道自己失去过什么,而时间总是耐心地给出答 案。看着过去失去的东西,会有一种心痛的感觉!算是一种悔悟吧!&22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32.Font-Bold=&True&& &/dxe:ASPxLabel& &/td& &/tr& &/table& &/asp:View& &asp:View ID=&View3& runat=&server&& &table& &tr& &td valign=&top&& &dxe:ASPxLabel ID=&ASPxLab el5& runat=&server& Text=&?一个人吻你,你一定被人深爱;不少人吻你,你一定是个漂 亮的小孩;非常多的人吻你,你会被口水淹死&33. 34.Font-Bold=&True&& &/dxe:ASPxLabel& 35. 36. 37. 38. 39. 40. 41. 42.&/td& &/tr& &/table& &/asp:View& &/asp:MultiView& &/dxp:PanelContent& &/PanelCollection& &/dxcp:ASPxCallbackPanel&然后,在页面中添另一个 ListBox,用来控制显示 NulitView 中的哪一个 View,如下:[xhtml] view plaincopyprint?1. &dxe:ASPxListBox ID=&ASPxListBox1& runat=&server& ClientInstanceName=&Lis tBox& Height=&83px&& 2. 3. 4. 5. 6. 7. 8. 9. &Items& &dxe:ListEditItem Text=&雷语 1& Value=&0& /& &dxe:ListEditItem Text=&雷语 2& Value=&1& /& &dxe:ListEditItem Text=&雷语 3& Value=&2& /& &/Items& &ClientSideEvents SelectedIndexChanged=&function(s, e) { var item = ListBox.GetSelectedItem(); CallbackPanel.PerformCallback(item.value); 用 AspxCallbackPanel 的回调方法 --& 10. 11. 12. 13. 14. 15. 16. &/dxe:ASPxListBox& /& }& }& Init=&function(s, e) { ListBox.SetSelectedIndex(0); CallbackPanel.PerformCallback(0); &!--此行就是调最后就是服务器端的处理程序,如下:[c-sharp] view plaincopyprint?1. protected void ASPxCallbackPanel_Callback(object source, CallbackEventArg sBase e) 2. 3. 4.{ MultiView.ActiveViewIndex = Convert.ToInt32(e.Parameter); }总结: 1 向页面添加 ASPxCallbackPanel 组件,并设置 ClientInstanceName 属性(客户端标识,如 ClientInstanceName=&CallbackPanel&)。 2 注册 ASPxCallbackPanel 组件的服务器端事件 ASPxCallback_Callback。 3 在客户端用户 CallBack 组件的客户端方法 PerformCallback 方法,以调用服务器端的 ASPxCallbackPanel_Callback 事件。 代码:CallbackPanel.PerformCallback(id)结论: 通过 ASPxCallbackpanel 与上一节的 AspxCallBack 的使用,我们发现 DevExpress Aspx 控件的 回调方法都是一致的。 即添加 ClientInstanceName 注册服务器端的 Callback 事件 调用 ClientInstanceName.PerformCallback 方法以执行服务器端的 Callback 中的代码 最后调用 CallbackComplete 事件,进行必要的处理(可选) 个人观点: ASPxCallbackPanel 和 AspxCallBack 虽然提供了很多的机制来完成 AJAx 的操作, 但从控件易用 性上来讲,ASPxCallbackPanel 并不如 UpdataPanel 如用。所有建议进行局部更新操作时,使用 UpdataPanel 进行更新。但通过 ASPxCallbackPanel 和 CallBack 组件的回调学习,使我们知道 了 ASPx 系列操作的回调机制与流程, 对于学习和使用其他控件来说还是有很大的帮助的。DevExpress Asp.net(6) ASPxLoadingPanel 的基本使用LoadingPanel 控件用于在回调服务器时在页面上展示的一个提示控件,类似于 ASP Ajax 中的UpdataProgress,但用法更简单和方法,可随意的控制它的显示时机。如下图: 除了默认的显示外,用户还可以定义显示图片、显示文字等。 1.1 代码及用法 [xhtml] view plaincopyprint?1. &dxlp:ASPxLoadingPanel ID=&ASPxLoadingPanel1& runat=&server& 2. 3. 4. ClientInstanceName=&LoadPanel& Text=&加载中...&& &/dxlp:ASPxLoadingPanel& &div style=&height: 74 background-color: #C0C0C0;& id=&divLoad&&5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.&/div& &dxe:ASPxButton ID=&ASPxButton1& runat=&server& Text=&ASPxButton&& &ClientSideEvents Click=&function(s, e) { LoadPanel.Show(); }& /& &/dxe:ASPxButton& &br /& &asp:CheckBox ID=&CheckBox1& runat=&server& Text=&Container& /&&!-总结: LoadingPanel 控件用于在回调服务器时在页面上展示的一个提示控件。 可通过 LoadPanel.Show()进行展示。 默认情况下,LoadingPanle 是显示在网页正中的,如果更新的只是一个 局部的 Panle 或 Div,则可以指定 LoadingPanel 的 ContainerElementID, 显示时会在指定 Control 的上方。如 ASPxLoadingPanel1.ContainerElementID = &divLoad&;--&默认情况下,LoadingPanle 是显示在网页正中的,如果更新的只是一个局部的 Panle 或 Div, 则可以指定 LoadingPanel 的 ContainerElementID, 显示时会在指定 Control 的上方。如[c-sharp] view plaincopyprint?1. if (this.CheckBox1.Checked) 2. 3. else ASPxLoadingPanel1.ContainerElementID = &divLoad&; 4.ASPxLoadingPanel1.ContainerElementID = &&;DevExpress Asp.net(7) ASPxTreeList 的基本使用之ASPxTreeList 是结合了 Tree 控件与 GridView 控件,不仅可以显示树形结构视图,而且可以还 编辑\删除\统计等制作,以下只是进行了一些基本的 AspxTreeList 操作的总结. 此事例主要说明了 ASPxTreeList 的一些基本使用 1 数据绑定 2 数据导出 3 分页设置 4 用户弹出面板设置 5 样式设置 6 ShowPreview 8 数据模板 9 选择事件 10 数据统计绑定绑定 ASPxTreeList 其他数据绑定一样,可用各种类型的数据源。但因为要显示树形结构, 所以除了 DataSourceID 必须进行设置以外,还得必须设置 KeyFieldName 与 ParentFieldName, KeyFieldName 与 ParentFieldName 就是主、子的关系,用于创建树形结构。 同时可以指定在 ASPxTreeList 默认展开的级数,代码如下: this.ASPxTreeList1.ExpandToLevel(2); //展开 2 级数据导出 关于 ASPxTreeList 数据导出,DevExpress 同样为我们提供了解决方案,即 ASPxTreeListExporter, 数据导出组件。 ASPxTreeListExproter 的用法非常简单,同时提供了 3 种文件格式的导出方案, xls|pdf|rft 使用方法: 1 向有 ASPxTreeList 数据的面页添加 ASPxTreeListExporter,并设置 Exporter 的 TreeListID 属 性,即导出哪一个 ASPxTreeList.默认不指定的情况下会导出页面中第一个 ASPxTreeList,但 当有多个时并希望导出指定 ASPxTreeList 时,则必须指定。 2 指定 ASPxTreeListExporter 的导出方法,格式文件格式和导出策略不同, ASPxTreeListExporter 提供了以下方法: void WritePdf(Stream stream); void WritePdfToResponse(); 5. void WriteRtf(Stream stream); void WriteRtfToResponse();void WriteXls(Stream stream); void WriteXlsToResponse();每个方法都有多个重载,可权限需要进行调用。另外需要说明的是,如果 ASPxTreeList 设置的分页 功能,调用以下方法时可能出现只导出当前面的现象,所以调用以上方法进, 可以设置导出的详细 设置,如下: ASPxTreeListExporter.Settings.ExpandAllNodes = ASPxTreeListExporter.Settings.ExportAllPages = ASPxTreeListExporter.Settings.ShowTreeButtons = 分面设置 默认情况下,ASPxTreeList 不进行分页处理,如果需要分面功能,可以设置其属 性 SettingsPager 如下代码: &SettingsPager AlwaysShowPager=&True& Mode=&ShowPager&& &/SettingsPager& 默认页大小为 10, 可以通过 SettingPager 的 PageSize 属性设置, PageSize=&20&用户弹出面板设置 即让用户自定义 ASPxTreeList 显示的字段名称,如下设置 &SettingsCustomizationWindow Enabled=&True& /& 如果当某一字段在初始时设置 Visible=false,那么此字段将会放在 CustomizationWindow 中, 当然,用户也可以把它拖放出来,也可以拖放进去。以下代码就是控制如果显示 与隐藏 CustomizationWindow. treeList.ShowCustomizationWindow(); st& treeList.HideCustomizationWindow(); //ClientInstanceName=&treeLi样式设置 样式设置最基本就是设置边框样式、页脚、tree 线等。如下 &Settings GridLines=&Both& ShowFooter=&True& ShowGroupFooter=&True& ShowPreview=&True& /& ShowPreview 可显示数据内容较多的 View,不影响 TreeList 的展示。 1 设置 ASPxTreeList 的 PreviewFieldName=&Location& 2 &Settings ShowPreview=&True& /&数据模板 &Templates& &DataCell& &%# Eval(&Common_Name&) %& &/DataCell& &/Templates&选择事件 可添加 treelist 的 FocuseNodeChnaged 事件来处理选择 Node 时的逻辑,但 ASPxTreeList 必须 设置 AllowFocusedNode=true,如下: &SettingsBehavior AllowFocusedNode=&True& /& 通过 FocuseNodeChnaged 事件来回调整 ASPxTreeList 的服务端事件来完成通信, 发下:&ClientSideEvents CustomDataCallback=&function(s, e) { alert(e.result); }& FocusedNodeChanged=&function(s, e) { var key = treeList.GetFocusedNodeKey(); treeList.PerformCustomDataCallback(key); }& /&以下代码设置为可多选,并且可以递归选择。 &SettingsSelection Enabled=&True& Recursive=&True& /&6. 7.8.演示代码: Js:&script type=&text/javascript&& function CwShow() { treeList.ShowCustomizationWindow(); btnCustWin.SetText(&Hide Customization Window&); } function CwHide() { treeList.HideCustomizationWindow(); btnCustWin.SetText(&Show Customization Window&); } function CwToggle() { if (treeList.IsCustomizationWindowVisible()) CwHide(); else CwShow(); } &/script&9. 10. HTML: 11.12. &%-- 导出代码--%& &dxe:ASPxButton ID=&ASPxButton1& runat=&server& OnClick=&ASPxButto n1_Click& Text=&Export to XLS&& &/dxe:ASPxButton& &dxe:ASPxButton ID=&ASPxButton2& runat=&server& OnClick=&ASPxButto n2_Click& Text=&Export to PDF&& &/dxe:ASPxButton& &dxwtl:ASPxTreeListExporter ID=&ASPxTreeListExporter1& runat=&serv er& TreeListID=&ASPxTreeList2&& &/dxwtl:ASPxTreeListExporter&&%-- 显示控制面板--%& &dxe:ASPxButton ID=&ASPxButton3& runat=&server& AutoPostBack=&fals e& Text=&Show Customer Window&& &ClientSideEvents Click=&function(s, e) { CwToggle(); }& /& &/dxe:ASPxButton&&%-- ASPxTreeList--%& &dxwtl:ASPxTreeList ID=&ASPxTreeList1& runat=&server& AutoGenerate Columns=&False& ClientInstanceName=&treeList& DataSourceID=&AccessDataSource1&Width=&100%& KeyFieldName=&ID& ParentFieldName=&ParentID& PreviewFieldName=&Location& oncustomdatacallback=&ASPxTreeList1_CustomDataCallback&& &ClientSideEvents CustomDataCallback=&function(s, e) { alert(e.result); }& FocusedNodeChanged=&function(s, e) { var key = treeList.GetFocusedNodeKey(); treeList.PerformCustomDataCallback(key); }& /& &Columns& &dxwtl:TreeListTextColumn FieldName=&Department& VisibleIn dex=&1&& &/dxwtl:TreeListTextColumn& &dxwtl:TreeListTextColumn FieldName=&Budget& VisibleIndex= &2& AllowSort=&True& SortIndex=&0& SortOrder=&Ascending&& &/dxwtl:TreeListTextColumn& &dxwtl:TreeListTextColumn FieldName=&Location& VisibleInde x=&3&& &/dxwtl:TreeListTextColumn& &dxwtl:TreeListTextColumn FieldName=&Phone1& VisibleIndex= &4&& &/dxwtl:TreeListTextColumn& &dxwtl:TreeListTextColumn FieldName=&Phone2& VisibleIndex= &5& Visible=&false&& &/dxwtl:TreeListTextColumn& &/Columns& &SettingsSelection Enabled=&True& Recursive=&True& /& &Summary& &dxwtl:TreeListSummaryItem DisplayFormat=&Count={0}& Field Name=&Department& ShowInColumn=&Department& SummaryType=&Count& /& &dxwtl:TreeListSummaryItem DisplayFormat=&Sum={0:C}& Field Name=&Budget& ShowInColumn=&Budget& SummaryType=&Sum& /& &/Summary& &SettingsPager AlwaysShowPager=&True& Mode=&ShowPager& PageSiz e=&20&& &/SettingsPager& &Settings GridLines=&Both& ShowFooter=&True& ShowGroupFooter=& True& ShowPreview=&True& /& &SettingsBehavior ExpandCollapseAction=&NodeDblClick& AllowFoc usedNode=&True& /& &SettingsCustomizationWindow Enabled=&True& /& &/dxwtl:ASPxTreeList&13. 14. C#:15. protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { DataBind(); this.ASPxTreeList1.ExpandToLevel(2); } }// 导出 xls protected void ASPxButton1_Click(object sender, EventArgs e) { ASPxTreeListExporter1.WriteXlsToResponse(); } //导出 pdf protected void ASPxButton2_Click(object sender, EventArgs e) { ASPxTreeListExporter1.Settings.ExpandAllNodes = ASPxTreeListExporter1.Settings.ExportAllPages = ASPxTreeListExporter1.Settings.ShowTreeButtons = ASPxTreeListExporter1.WritePdfToResponse(); }protected void ASPxTreeList1_CustomDataCallback(object sender, Dev Express.Web.ASPxTreeList.TreeListCustomDataCallbackEventArgs e) { e.Result = &Key=& + e.A }DevExpress Asp.net(9) ASPxHiddenField 的特性与基本使 用1.1 说明 类似于 HTML 的 Hidden 标签,在页面上不可见,主要是用来传递和同步客户端与服 务器端的数据,但 HiddenField 功能更强大,同时改进了 Asp.net 下的 Hidden 从 客户端赋值 而服务器端取不到值的问题。三它继承了IDictionary&String, Object&, ICollection&KeyValuePair&String, Object&&, IEnumerable&KeyValuePair&String, Object&&一系列的接口,除了可以用键/值对的 方式存取数据外,还提供了一系列的操作方法,如:Add、Set、Get、Clear、Remove 等方 法进行操作。 1.2 代码及用法(Js 方法原型同样适用) public void Add(string propertyName, object propertyValue); public void Set(string propertyName, object propertyValue); public void Get(string propertyName); public void Clear(); public bool Remove(string propertyName);propertyName:key 值。 propertyValue:Object. 1.3 代码与演示说明HTML:在页在中放置一个 ASPxHiddenField,并添加四个按钮进行读写操作控制。[xhtml] view plaincopyprint?1. &dxhf:ASPxHiddenField ID=&hdCollection& runat=&server& ClientInstanceName =&hdCollection&& 2. 3. 4. 5. 6. 7. 8. 9. 10. &/dxhf:ASPxHiddenField& &br /& Key: &input id=&txtKey& type=&text& /&&br /&Value:&input id=&txtValue& type=&text& /& &br /& &input id=&Button1& type=&button& value=&Add/Set& onclick=&Add()& /& &input id=&Button2& type=&button& value=&Get& onclick=&Get()&/& &input id=&Button3& type=&button& value=&Clear& onclick=&Clear()& /&&input id=&Button4& type=&button& value=&Remove& onclick=&Remove()& /&JS 代码,进行读写操作。 Add 方法:用来向 ASPxHiddenField 写入值。 Remove 方法:移除指定 Key 的值。 Get 方法:获取指定 Key 的值 Clear 方法:清除所有的值。[javascript] view plaincopyprint?1. &mce:script type=&text/javascript&&&!-- 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36.function GetControl(id) { return document.getElementById(id); } function Add() { var key = GetControl(&txtKey&). var value = GetControl(&txtValue&). if (hdCollection.Get(key) == null) { hdCollection.Add(key, value); } else { hdCollection.Set(key, value); }} function Remove() { var key = GetControl(&txtKey&). if (hdCollection.Get(key) != null) { hdCollection.Remove(key); } else { alert(key + & 值不存在!&); } } function Get() { var key = GetControl(&txtKey&). if (hdCollection.Get(key) != null) { alert(hdCollection.Get(key)); } else { alert(key + & 值不存在!&); } } function Clear() { hdCollection.Clear(); } 37. // --&&/mce:script&服务器代码,在加载页面时添加一个测试值。[c-sharp] view plaincopyprint?1. if (!IsPostBack) 2. hdCollection.Add(&DEMOKey&, &Hello,World!&);DevExpress TreeList 使用心得最近做项目新增光纤线路清查功能模块, 思路和算法已经想好了, 些代码时候居然在一个控件上 纠结了好长的时间,虽然后来搞定了,但是好记性不然烂笔头,还是写下来,以后要用到的时候 直接翻就行,帮助文档看得比较纠结,还是自己写的好。往往当时会用了,一段时间没用后再用 的时候有要翻帮助文档或网上搜, 纠结很久。 我们学东西的时候一般不应该花过多精力和时间到 控件或框架上,但是做项目要的是结果。记得有次去面试败在机试上,题也简单,CRUD 而已, 就是不会用控件,浪费了很多时间。1.数据绑定最基本的两个属性:KeyFieldName 和 ParentFieldName。 SELECT OfficeID,OfficeName,ParentOfficeID FROM tOffice 这种数据库设计是比较常见的,一般数据满足树形关系就可以这样设计。绑定数据时,只需指定 DataSource 为对应 的 DataTable,指定 KeyFieldName 为表主键字段,ParentFieldName 为表指向主键的外键字段名。private void BindData() { this.tlOffice.DataSource = dtO tlOffice.KeyFieldName = &OfficeID&; //tlOffice.DataMember = &OfficeName&; tlOffice.Columns[&OfficeName&].Caption = &局名称&; tlOffice.ParentFieldName = &ParentOfficeID&; }绑定数据如下: 为让数据不可编辑,需将 OPtionsBehavior→Editable 属性设为 False: ① . 选择某一节点时,该节点的子节点全部选择 取消某一节点时,该节点的子节点全部取消选 择 哪个节点引起行为的?节点是选中还是取消选中?由此确定方法的两个参数: TreeListNode 和 CheckState。遍历该节点及其子孙,并将其选中状态设置为该节点的状态即可。/// &summary& /// 选择某一节点时,该节点的子节点全部选择 取消某一节点时,该节点的子节点全部取消选 择 /// &/summary& /// &param name=&node&&&/param& /// &param name=&state&&&/param& private void SetCheckedChildNodes(TreeListNode node, CheckState check) { for (int i = 0; i & node.Nodes.C i++) { node.Nodes[i].CheckState = SetCheckedChildNodes(node.Nodes[i], check); } }② . ,某节点的子节点全部选择时,该节点选择;某节点的子节点未全部选择时,该节点不选择/// &summary& /// 某节点的子节点全部选择时,该节点选择 /// &/summary& /// &param name=&node&&&/param& /// &param name=&check&&&/param& private void SetCheckedParentNodes(TreeListNode node, CheckState check) { if (node.ParentNode != null) { CheckState parentCheckState = node.ParentNode.CheckS CheckState nodeCheckS for (int i = 0; i & node.ParentNode.Nodes.C i++) { nodeCheckState = (CheckState)node.ParentNode.Nodes[i].CheckS if (!check.Equals(nodeCheckState))//只要任意一个与其选中状态不一 样即父节点状态不全选 { parentCheckState = CheckState.U } parentCheckState =//否则(该节点的兄弟节点选中状态都相同), 则父节点选中状态为该节点的选中状态 } node.ParentNode.CheckState = parentCheckS SetCheckedParentNodes(node.ParentNode, check);//遍历上级节点 } } 某节点的子节点未全部选择时,该节点不选择上两步写好了,别忘了上面的两个方法在 TreeList_AfterCheckNode 里面触发:private void tlOffice_AfterCheckNode(object sender, DevExpress.XtraTreeList.NodeEventArgs e) { SetCheckedChildNodes(e.Node, e.Node.CheckState); SetCheckedParentNodes(e.Node, e.Node.CheckState); }运行效果如下图:3.获取选中的复选框数据列表当用户选择一个或多个节点时,要获取对应的数据,将数据表对应主键存到集合中即可。关 键是怎样获取数据,当时就纠结了很久。private List&int& lstCheckedOfficeID = new List&int&();//选择局 ID 集合 /// &summary& /// 获取选择状态的数据主键 ID 集合 /// &/summary& /// &param name=&parentNode&&父级节点&/param& private void GetCheckedOfficeID(TreeListNode parentNode) { if (parentNode.Nodes.Count == 0) {//递归终止 } foreach (TreeListNode node in parentNode.Nodes) { if (node.CheckState == CheckState.Checked) { DataRowView drv = tlOffice.GetDataRecordByNode(node) as DataRowV//关键代码,就是不知道是这样获取数据而纠结了很久(鬼知道可以转换为 DataRowView 啊) if (drv != null) { int OfficeID = (int)drv[&OfficeID&]; lstCheckedOfficeID.Add(OfficeID); }} GetCheckedOfficeID(node); } }下面测试获取主键列表:private void btnCheck_Click(object sender, EventArgs e) { this.lstCheckedOfficeID.Clear(); if (tlOffice.Nodes.Count & 0) { foreach (TreeListNode root in tlOffice.Nodes) { GetCheckedOfficeID(root); } } string idStr = string.E foreach (int id in lstCheckedOfficeID) { idStr += id + & &; } MessageBox.Show(idStr); } 如下图:获取选中主键集合后就能处理相关业务了。暂时写到这里了,以后有时间在多多总结。关于 aspxTreeList 的用法要求:根据 ID 来控制 ImageButton 的显示和隐藏(所有数据加载时进行控制) .aspx 页面&dxwtl:ASPxTreeList ID=&treeListSysModule& runat=&server& KeyFieldName=&ID& ParentFieldName=&PID& Width=&660px& ClientInstanceName=&treeListSysModule& OnCustomCallback=&treeListSysModule_CustomCallback& OnHtmlDataCellPrepared=&treeListSysModule_HtmlDataCellPrepared& & &Styles Cell-HorizontalAlign=&Left&& &Cell HorizontalAlign=&Left&&&/Cell& &/Styles& &SettingsPager PageSize=&20& Mode=&ShowPager& &&/SettingsPager& &Settings GridLines=&Both& /& &Columns& &dxwtl:TreeListTextColumn Caption=&ID& FieldName=&ID& VisibleIndex=&0& Visible=&false&&&/dxwtl:TreeListTextColumn& &dxwtl:TreeListTextColumn Caption=&系统名称& FieldName=&sysname& VisibleIndex=&1& &&/dxwtl:TreeListTextColumn& &dxwtl:TreeListTextColumn Caption=&修改& VisibleIndex=&2& & &DataCellTemplate& &center& &asp:ImageButton ID =&imgbtnUpdateWeb& runat =&server& ImageUrl=&~/Images/img/updateico.gif& AlternateText=&修改& CommandArgument ='&%# eval_r(&ID&) %&' CommandName=&update& OnCommand=&imgbtnUpdateWeb_Command&/& &/center& &/DataCellTemplate& &/dxwtl:TreeListTextColumn& &dxwtl:TreeListTextColumn Caption=&角色& VisibleIndex=&3& & &DataCellTemplate& &center& &asp:ImageButton ID=&imgbtnRole& runat=&server& AlternateText=&角色& ImageUrl=&~/Images/img/perm.gif& CommandArgument='&%# eval_r(&ID&) %&' CommandName=&Role& OnCommand=&imgbtnRole_Command& /& &/center& &/DataCellTemplate& &/dxwtl:TreeListTextColumn& &dxwtl:TreeListTextColumn Caption=&删除& VisibleIndex=&4& & &DataCellTemplate & &center& &asp:ImageButton ID=&imgbtnDelete& runat=&server& ImageUrl=&~/Images/img/delete.gif& OnClientClick=&return confirm('你确定要删除此记录吗? ');& AlternateText=&删除& CommandArgument='&%# eval_r(&ID&) %&' CommandName=&De& OnCommand=&imgbtnDelete_Command&/& &/center& &/DataCellTemplate& &/dxwtl:TreeListTextColumn& &/Columns& &/dxwtl:ASPxTreeList&.cs 文件using DevExpress.Web.ASPxTreeL/// &summary& /// 控制修改、角色、删除按钮 /// &/summary& /// &param name=&sender&&&/param& /// &param name=&e&&&/param& protected void treeListSysModule_HtmlDataCellPrepared(object sender, DevExpress.Web.ASPxTreeList.TreeListHtmlDataCellEventArgs e) { if (e.NodeKey.Substring(e.NodeKey.Length - 3, 3) == &000&) { ImageButton imgUpdate = treeListSysModule.FindDataCellTemplateControl(e.NodeKey, treeListSysModule.Columns[2] as TreeListDataColumn, &imgbtnUpdateWeb&) as ImageB ImageButton imgRole = treeListSysModule.FindDataCellTemplateControl(e.NodeKey, treeListSysModule.Columns[3] as TreeListDataColumn, &imgbtnRole&) as ImageB ImageButton imgDelete = treeListSysModule.FindDataCellTemplateControl(e.NodeKey, treeListSysModule.Columns[4] as TreeListDataColumn, &imgbtnDelete&) as ImageB imgUpdate.Visible = imgRole.Visible = imgDelete.Visible = } else { ImageButton imgUpdate = treeListSysModule.FindDataCellTemplateControl(e.NodeKey, treeListSysModule.Columns[2] as TreeListDataColumn, &imgbtnUpdateWeb&) as ImageB ImageButton imgRole = treeListSysModule.FindDataCellTemplateControl(e.NodeKey, treeListSysModule.Columns[3] as TreeListDataColumn, &imgbtnRole&) as ImageB ImageButton imgDelete = treeListSysModule.FindDataCellTemplateControl(e.NodeKey, treeListSysModule.Columns[4] as TreeListDataColumn, &imgbtnDelete&) as ImageB imgRole.Visible = imgDelete.Visible = imgUpdate.Visible = } 注:e.NodeKey 就是页面绑定的主键 ID。
第三方控件(DevExpress)使用大全【个人开发过程中整理收集】_计算机软件及应用_IT...效果如下: 代码如下: private void treeList1_CustomDrawNodeCell(object ...{ DevExpress.XtraTreeList.TreeListHitInfo hi = treeList1.CalcHitInfo (e...DevExpress控件使用心得 1页 免费 第三方控件(DevExpress)... 16页 3下载券 ...DevExpress TreeList gridview 鼠标拖曳的实例.doc_计算机软件及应用_IT/计算机_专业资料。要求:从 DevExpress gridview 中拖曳一行数据到 DevExpress 的 treelist 中...效果如下: 代码如下: privatevoid treeList1_CustomDrawNodeCell(object sender, DevExpress.XtraTreeList.CustomDrawNodeCellEventArgs e) { TreeList node = ...DevExpress12示例代码结构_计算机软件及应用_IT/...了一下,适合最最最初级入门的人员学习官方例程使用...XtraTreeList TreeListMainDemo.exe TreeListTutorials...TreeList with CheckBox_计算机软件及应用_IT/计算机_专业资料。C#.Net中Winform开发经常用到第三方DevExpress控件TreeList,此文档主要介绍如何给TreeList(树形)控件添...DevExpress.Utils.EditorShowMode.MouseUp; 另外如果是treeList则设置treeList-...DataTable.Compute()用法vii Object Compute (string expression,string filter) ...
All rights reserved Powered by
www.tceic.com
copyright &copyright 。文档资料库内容来自网络,如有侵犯请联系客服。

我要回帖

更多关于 bootstrap中树形结构 的文章

 

随机推荐