上一节,已经介绍了ASPxGridView的自定义列和基本事件 ,本节接着将介绍Dev控件的客户端事件模型。

在上节示例基础上,我们增加一行菜单,使用Dev的ASPxMenu来实现,如下图所示。

图一 添加菜单的界面

增加菜单的代码如下:

  1. <dx:ASPxMenu ID="ASPxMenu1" runat="server" RenderMode="Lightweight" Width="100%" ItemAutoWidth="False" Theme="Aqua">
  2. <Border BorderWidth="0px" />
  3. <BorderTop BorderWidth="1px" />
  4. <Items>
  5. <dx:MenuItem Text="新增" Image-Url="~/Assets/images/menu/Add_16x16.png" Name="new"></dx:MenuItem>
  6. <dx:MenuItem Text="编辑" Image-Url="~/Assets/images/menu/Edit_16x16.png" Name="edit"></dx:MenuItem>
  7. <dx:MenuItem Text="删除" Image-Url="~/Assets/images/menu/Delete_16x16.png" Name="delete"></dx:MenuItem>
  8. <dx:MenuItem Text="刷新" Image-Url="~/Assets/images/menu/Refresh_16x16.png" Name="refresh"></dx:MenuItem>
  9. </Items>
  10. </dx:ASPxMenu>

DevExpress ASP.NET的控件,如ASPxButton,ASPxLabel,ASPxMenu、ASPxPopupMenu、ASPxGridView、

ASPxTreeList、ASPxPopupControl等,它们都有一个统一的ClientSideEvents事件模型,提供控件的客户端事件支持。

此例中的ASPxMenu,如何来增加ClientSideEvents客户端事件操作呢,代码如下:

  1. <dx:ASPxMenu ID="ASPxMenu1" runat="server" RenderMode="Lightweight" Width="100%" ItemAutoWidth="False" Theme="Aqua">
  2. <Border BorderWidth="0px" />
  3. <BorderTop BorderWidth="1px" />
  4. <Items>
  5. <dx:MenuItem Text="新增" Image-Url="~/Assets/images/menu/Add_16x16.png" Name="new"></dx:MenuItem>
  6. <dx:MenuItem Text="编辑" Image-Url="~/Assets/images/menu/Edit_16x16.png" Name="edit"></dx:MenuItem>
  7. <dx:MenuItem Text="删除" Image-Url="~/Assets/images/menu/Delete_16x16.png" Name="delete"></dx:MenuItem>
  8. <dx:MenuItem Text="刷新" Image-Url="~/Assets/images/menu/Refresh_16x16.png" Name="refresh"></dx:MenuItem>
  9. </Items>
  10. <ClientSideEvents ItemClick="function(s, e) {MenuItemClick(s,e);}" />
  11. </dx:ASPxMenu>

同时定义了Javascript方法MenuItemClick,来响应菜单项的Click事件操作:

  1. function MenuItemClick(s, e) {
  2. //通过e.item.name来区别由Menu的哪一项来触发
  3. switch (e.item.name) {
  4. case "new":
  5. //新增操作
  6. break;
  7. case "edit":
  8. //编辑操作
  9. break;
  10. case "delete":
  11. //删除操作
  12. break;
  13. case "refresh":
  14. //刷新操作
  15. break;
  16. }
  17. }

客户端菜单项Click事件的骨架有了,如果来实现对ASPxGridView控件的上述操作呢?

此时,我们需要了解Dev控件的另外一个重要属性:ClientInstanceName,这个属性,为Dev的服务端控件提供了一个客户端的name,

定义客户端name后,ASPxGridView服务端控件,可以在客户端以客户端对象身份来进行操作和访问。

修改代码,为ASPxGridView1增加一个客户端名称:"grid"

  1. <dx:ASPxGridView ID="ASPxGridView1" runat="server" AutoGenerateColumns="False" Width="100%"
  2. OnRowInserting="ASPxGridView1_RowInserting" ClientInstanceName="grid"
  3. OnRowUpdating="ASPxGridView1_RowUpdating"
  4. DataSourceID="XpoDataSource1" KeyFieldName="UserID" Theme="Aqua">
  5. ......
  6. </dx:ASPxGridView>

修改MenuItemClick方法,增加【新增】、【编辑】操作代码:

  1. function MenuItemClick(s, e) {
  2. //通过e.item.name来区别由Menu的哪一项来触发
  3. switch (e.item.name) {
  4. case "new":
  5. //新增操作
  6. grid.AddNewRow();
  7. break;
  8. case "edit":
  9. var index = grid.GetFocusedRowIndex();
  10. if (index != -1) {
  11. grid.StartEditRow(index);
  12. } else {
  13. alert('请选择要编辑的记录!');
  14. }
  15. //编辑操作
  16. break;
  17. case "delete":
  18. //删除操作
  19. break;
  20. case "refresh":
  21. //刷新操作
  22. break;
  23. }
  24. }

点击菜单项的【新增】,显示新增界面如下:

图二 新增界面

点击【编辑】,显示界面如下:

                          图三 编辑界面

注意:【新增】、【编辑】操作,分别使用了ASPxGridView客户端对象的方法:

新增行:      grid.AddNewRow();

获取行索引:grid.GetFocusedRowIndex();

编辑行:      grid.StartEditRow(index);

接下来,如何实现【删除】和【刷新】操作呢?这将使用Dev控件强大的Callback事件回调机制,通过客户端的PerformCallback

与服务端的CustomCallback事件回调结合,服务端的回调方法对客户端事件作出响应。

首先,我们增加服务端的Callback事件代码,选择OnCustomCallback,点击新增事件,后台代码自动完成对事件的添加:

添加事件如下:

生成的回调方法:

  1. protected void ASPxGridView1_CustomCallback(object sender, ASPxGridViewCustomCallbackEventArgs e)
  2. {
  3.  
  4. }

接着,继续修改MenuItemClick方法,增加对Delete事件代码:

  1. function MenuItemClick(s, e) {
  2. //通过e.item.name来区别由Menu的哪一项来触发
  3. switch (e.item.name) {
  4. case "new":
  5. //新增操作
  6. grid.AddNewRow();
  7. break;
  8. case "edit":
  9. var index = grid.GetFocusedRowIndex();
  10. if (index != -1) {
  11. grid.StartEditRow(index);
  12. } else {
  13. alert('请选择要编辑的记录!');
  14. }
  15. //编辑操作
  16. break;
  17. case "delete":
  18. var key = grid.GetRowKey(grid.GetFocusedRowIndex());
  19. if (key != null && key != "") {
  20. if (window.confirm('你确定要删除这条记录吗?')) {
  21. grid.PerformCallback("delete@" + key);
  22. }
  23. }
  24. //删除操作
  25. break;
  26. case "refresh":
  27. //刷新操作
  28. break;
  29. }
  30. }

继续修改服务端回调方法:

  1. protected void ASPxGridView1_CustomCallback(object sender, ASPxGridViewCustomCallbackEventArgs e)
  2. {
  3. string[] strParames = e.Parameters.ToString().Split(new char[] { '@' });
  4. switch (strParames[0])
  5. {
  6. case "delete":
  7. CriteriaOperator criteria = CriteriaOperator.Parse("[UserID]='" + strParames[1] + "'");
  8. Users obj = session.FindObject<Users>(criteria);
  9. obj.Delete();
  10. ASPxGridView1.DataBind();
  11. break;
  12. }
  13. }

完成上述修改后,点击【删除】按钮,弹出删除确认对话框,点击”确定“,记录将被删除,ASPxGridView数据被刷新。

图四 点击删除,弹出确认对话框,并重新绑定数据

同理,我们实现【刷新】操作如下:

  1. case "refresh":
  2. grid.PerformCallback("refresh@");
  3. //刷新操作
  4. break;

继续修改回调方法:

  1. protected void ASPxGridView1_CustomCallback(object sender, ASPxGridViewCustomCallbackEventArgs e)
  2. {
  3. string[] strParames = e.Parameters.ToString().Split(new char[] { '@' });
  4. switch (strParames[0])
  5. {
  6. case "delete":
  7. CriteriaOperator criteria = CriteriaOperator.Parse("[UserID]='" + strParames[1] + "'");
  8. Users obj = session.FindObject<Users>(criteria);
  9. obj.Delete();
  10. ASPxGridView1.DataBind();
  11. break;
  12. case "refresh":
  13. ASPxGridView1.DataBind();
  14. break;
  15. }
  16. }

此时点击【刷新】按钮,数据将被刷新,如果效果不明显,可以手工修改数据库中的数据,以验证刷新的效果。

注意:【删除】操作,使用了ASPxGridView客户端对象的方法:

获取行主键:grid.GetRowKey(grid.GetFocusedRowIndex());

为了使【删除】、【刷新】操作在客户端能得到反馈,还可以在ASPxGridView的ClientSideEvents事件中增加:EndCallback,

修改服务端【删除】、【刷新】回调方法,增加如下代码:

ASPxGridView1.JSProperties.Remove("cpMsg");
ASPxGridView1.JSProperties.Add("cpMsg", "删除成功");

注意:按Dev控件约定,此处添加JSProperties的key,只能以 cp 为前缀

  1. protected void ASPxGridView1_CustomCallback(object sender, ASPxGridViewCustomCallbackEventArgs e)
  2. {
  3. string[] strParames = e.Parameters.ToString().Split(new char[] { '@' });
  4. switch (strParames[0])
  5. {
  6. case "delete":
  7. CriteriaOperator criteria = CriteriaOperator.Parse("[UserID]='" + strParames[1] + "'");
  8. Users obj = session.FindObject<Users>(criteria);
  9. obj.Delete();
  10. ASPxGridView1.DataBind();
  11. ASPxGridView1.JSProperties.Remove("cpMsg");
  12. ASPxGridView1.JSProperties.Add("cpMsg", "删除成功");
  13. break;
  14. case "refresh":
  15. ASPxGridView1.DataBind();
  16. ASPxGridView1.JSProperties.Remove("cpMsg");
  17. ASPxGridView1.JSProperties.Add("cpMsg", "刷新成功");
  18. break;
  19. }
  20. }

客户端响应EndCallback方法:

  1. function EndCallback(s, e) {
  2. if (s.cpMsg) {
  3. alert(s.cpMsg);
  4. s.cpMsg = null;
  5. }
  6. }

此时,再进行【删除】、【刷新】按钮完成操作时,会弹出提醒框。

图五 EndCallback 刷新返回消息

图六 EndCallback 删除返回消息

在此基础上,通过对EndCallback返回的信息进行处理,可以扩展更友好的提醒。

除了CustomCallback,还有CustomDataCallback、CustomButtonCallback,使用方法类似,细节稍有不同。

CustomDataCallback:可用于前后台的数据传输和回调。

CustomButtonCallback:可以针对特定服务端Button进行回调。

注意:对于ASPxTreeList控件,我们将使用到的客户端方法。

新增树结点:   tree.StartEditNewNode();

获取树节点的主键:var key = tree.GetFocusedNodeKey();

在下一节中,将介绍ASPxTreeList的使用,到时再对CustomDataCallback,CustomButtonCallback的使用进行

详细描述。

最后附上完整代码。

前台代码:

  1. <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
  2.  
  3. <%@ Register Assembly="DevExpress.Web.v12.2, Version=12.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" Namespace="DevExpress.Web.ASPxMenu" TagPrefix="dx" %>
  4.  
  5. <%@ Register Assembly="DevExpress.Xpo.v12.2.Web, Version=12.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" Namespace="DevExpress.Xpo" TagPrefix="dx" %>
  6.  
  7. <%@ Register Assembly="DevExpress.Web.v12.2, Version=12.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" Namespace="DevExpress.Web.ASPxGridView" TagPrefix="dx" %>
  8.  
  9. <%@ Register Assembly="DevExpress.Web.v12.2, Version=12.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" Namespace="DevExpress.Web.ASPxEditors" TagPrefix="dx" %>
  10.  
  11. <!DOCTYPE html>
  12.  
  13. <html xmlns="http://www.w3.org/1999/xhtml">
  14. <head runat="server">
  15. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  16. <title></title>
  17. <script type="text/javascript">
  18. function MenuItemClick(s, e) {
  19. //通过e.item.name来区别由Menu的哪一项来触发
  20. switch (e.item.name) {
  21. case "new":
  22. //新增操作
  23. grid.AddNewRow();
  24. break;
  25. case "edit":
  26. var index = grid.GetFocusedRowIndex();
  27. if (index != -1) {
  28. grid.StartEditRow(index);
  29. } else {
  30. alert('请选择要编辑的记录!');
  31. }
  32. //编辑操作
  33. break;
  34. case "delete":
  35. var key = grid.GetRowKey(grid.GetFocusedRowIndex());
  36. if (key != null && key != "") {
  37. if (window.confirm('你确定要删除这条记录吗?')) {
  38. grid.PerformCallback("delete@" + key);
  39. }
  40. }
  41. //删除操作
  42. break;
  43. case "refresh":
  44. grid.PerformCallback("refresh@");
  45. //刷新操作
  46. break;
  47. }
  48. }
  49.  
  50. function EndCallback(s, e) {
  51. if (s.cpMsg) {
  52. alert(s.cpMsg);
  53. s.cpMsg = null;
  54. }
  55. }
  56. </script>
  57. </head>
  58. <body>
  59. <form id="form1" runat="server">
  60. <div>
  61. <p>
  62. <h1>Dev控件的客户端事件模型</h1>
  63. </p>
  64. <dx:ASPxMenu ID="ASPxMenu1" runat="server" RenderMode="Lightweight" Width="100%" ItemAutoWidth="False" Theme="Aqua">
  65. <Border BorderWidth="0px" />
  66. <BorderTop BorderWidth="1px" />
  67. <Items>
  68. <dx:MenuItem Text="新增" Image-Url="~/Assets/images/menu/Add_16x16.png" Name="new"></dx:MenuItem>
  69. <dx:MenuItem Text="编辑" Image-Url="~/Assets/images/menu/Edit_16x16.png" Name="edit"></dx:MenuItem>
  70. <dx:MenuItem Text="删除" Image-Url="~/Assets/images/menu/Delete_16x16.png" Name="delete"></dx:MenuItem>
  71. <dx:MenuItem Text="刷新" Image-Url="~/Assets/images/menu/Refresh_16x16.png" Name="refresh"></dx:MenuItem>
  72. </Items>
  73. <ClientSideEvents ItemClick="function(s, e) {MenuItemClick(s,e);}" />
  74. </dx:ASPxMenu>
  75. <dx:ASPxGridView ID="ASPxGridView1" runat="server" AutoGenerateColumns="False" Width="100%"
  76. OnRowInserting="ASPxGridView1_RowInserting" ClientInstanceName="grid"
  77. OnRowUpdating="ASPxGridView1_RowUpdating" OnCustomCallback="ASPxGridView1_CustomCallback"
  78. DataSourceID="XpoDataSource1" KeyFieldName="UserID" Theme="Aqua">
  79. <ClientSideEvents EndCallback="EndCallback" />
  80. <Columns>
  81. <dx:GridViewCommandColumn VisibleIndex="0" ButtonType="Image" Width="80px">
  82. <EditButton Visible="true">
  83. <Image ToolTip="编辑" Url="Assets/images/edit.png"></Image>
  84. </EditButton>
  85. <NewButton Visible="true">
  86. <Image ToolTip="新增" Url="Assets/images/new.png"></Image>
  87. </NewButton>
  88. <DeleteButton Visible="true">
  89. <Image ToolTip="删除" Url="Assets/images/delete.png"></Image>
  90. </DeleteButton>
  91. <UpdateButton Visible="true">
  92. <Image ToolTip="保存" Url="Assets/images/save.gif"></Image>
  93. </UpdateButton>
  94. <CancelButton Visible="true">
  95. <Image ToolTip="取消" Url="Assets/images/cancel.gif"></Image>
  96. </CancelButton>
  97. </dx:GridViewCommandColumn>
  98. <dx:GridViewDataTextColumn FieldName="UserID" ReadOnly="True" VisibleIndex="1" Visible="false">
  99. </dx:GridViewDataTextColumn>
  100. <dx:GridViewDataTextColumn FieldName="UserName" VisibleIndex="2" Caption="用户姓名">
  101. <EditFormSettings VisibleIndex="2" Visible="True" Caption="用户姓名" />
  102. </dx:GridViewDataTextColumn>
  103. <dx:GridViewDataTextColumn FieldName="FirstName" VisibleIndex="3" Caption="名" Width="80px">
  104. <EditFormSettings VisibleIndex="3" Visible="True" Caption="名" />
  105. <CellStyle HorizontalAlign="Center" />
  106. <HeaderStyle HorizontalAlign="Center" />
  107. </dx:GridViewDataTextColumn>
  108. <dx:GridViewDataTextColumn FieldName="LastName" VisibleIndex="4" Caption="姓" Width="80px">
  109. <EditFormSettings VisibleIndex="4" Visible="True" Caption="姓" />
  110. <CellStyle HorizontalAlign="Center" />
  111. <HeaderStyle HorizontalAlign="Center" />
  112. </dx:GridViewDataTextColumn>
  113. <dx:GridViewDataTextColumn FieldName="MiddleName" VisibleIndex="5" Caption="教名" Width="100px">
  114. <EditFormSettings VisibleIndex="5" Visible="False" Caption="教名" />
  115. <CellStyle HorizontalAlign="Center" />
  116. <HeaderStyle HorizontalAlign="Center" />
  117. </dx:GridViewDataTextColumn>
  118. <dx:GridViewDataComboBoxColumn FieldName="Gender" VisibleIndex="6" Caption="性别" Width="80px">
  119. <EditFormSettings VisibleIndex="4" Visible="True" Caption="性别" />
  120. <CellStyle HorizontalAlign="Center" />
  121. <HeaderStyle HorizontalAlign="Center" />
  122. <PropertiesComboBox>
  123. <Items>
  124. <dx:ListEditItem Text="男" Value="男" />
  125. <dx:ListEditItem Text="女" Value="女" />
  126. </Items>
  127. </PropertiesComboBox>
  128. </dx:GridViewDataComboBoxColumn>
  129. <dx:GridViewDataTextColumn FieldName="Hobbies" VisibleIndex="7" Caption="兴趣爱好" Width="100px">
  130. <EditFormSettings VisibleIndex="5" Visible="True" Caption="兴趣爱好" />
  131. <CellStyle HorizontalAlign="Center" />
  132. <HeaderStyle HorizontalAlign="Center" />
  133. <EditItemTemplate>
  134. <table border="0">
  135. <tr>
  136. <td>
  137. <dx:ASPxCheckBox ID="ASPxCheckBox_H1" runat="server" ClientInstanceName="cb_hob1" Text="阅读" Layout="Flow" OnInit="ASPxCheckBox_Hobbies_Init">
  138. </dx:ASPxCheckBox>
  139. </td>
  140. <td> </td>
  141. <td>
  142. <dx:ASPxCheckBox ID="ASPxCheckBox_H2" ClientInstanceName="cb_hob2" runat="server" Text="思考" Layout="Flow" OnInit="ASPxCheckBox_Hobbies_Init">
  143. </dx:ASPxCheckBox>
  144. </td>
  145. <td> </td>
  146. <td>
  147. <dx:ASPxCheckBox ID="ASPxCheckBox_H3" runat="server" ClientInstanceName="cb_hob3" Text="运动" Layout="Flow" OnInit="ASPxCheckBox_Hobbies_Init">
  148. </dx:ASPxCheckBox>
  149. </td>
  150. <td> </td>
  151. <td>
  152. <dx:ASPxCheckBox ID="ASPxCheckBox_H4" runat="server" ClientInstanceName="cb_hob4" Text="社交" Layout="Flow" OnInit="ASPxCheckBox_Hobbies_Init">
  153. </dx:ASPxCheckBox>
  154. </td>
  155. </tr>
  156. </table>
  157. </EditItemTemplate>
  158. </dx:GridViewDataTextColumn>
  159. <dx:GridViewDataTextColumn FieldName="EmailID" VisibleIndex="6" Caption="邮箱" Width="200px">
  160. <EditFormSettings VisibleIndex="6" Visible="True" Caption="邮箱" ColumnSpan="2" />
  161. </dx:GridViewDataTextColumn>
  162. <dx:GridViewDataDateColumn FieldName="CreateTime" VisibleIndex="7" Caption="创建时间" Width="100px">
  163. <EditFormSettings VisibleIndex="5" Visible="False" Caption="创建时间" />
  164. <CellStyle HorizontalAlign="Center" />
  165. <HeaderStyle HorizontalAlign="Center" />
  166. </dx:GridViewDataDateColumn>
  167. <dx:GridViewDataDateColumn FieldName="ModifyTime" VisibleIndex="7" Caption="修改时间" Width="100px">
  168. <EditFormSettings VisibleIndex="5" Visible="False" Caption="修改时间" />
  169. <CellStyle HorizontalAlign="Center" />
  170. <HeaderStyle HorizontalAlign="Center" />
  171. </dx:GridViewDataDateColumn>
  172. </Columns>
  173. <SettingsBehavior ConfirmDelete="true" AllowFocusedRow="true" AllowSelectSingleRowOnly="true" AllowSelectByRowClick="true" />
  174. <SettingsEditing EditFormColumnCount="2" />
  175. <Settings ShowFooter="True" />
  176. <SettingsText EmptyDataRow="无记录" ConfirmDelete="确定删除吗?" />
  177. <SettingsPager Mode="ShowPager" PageSize="3" />
  178. </dx:ASPxGridView>
  179. </div>
  180. <dx:XpoDataSource ID="XpoDataSource1" runat="server" TypeName="XPOModel.DemoDB.Users"></dx:XpoDataSource>
  181. </form>
  182. </body>
  183. </html>

后台代码:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.UI;
  6. using System.Web.UI.WebControls;
  7. using System.Configuration;
  8. using DevExpress.Xpo;
  9. using DevExpress.Xpo.DB;
  10. using DevExpress.Web.ASPxGridView;
  11. using DevExpress.Web.ASPxEditors;
  12. using System.Collections;
  13. using DevExpress.Data.Filtering;
  14. using XPOModel.DemoDB;
  15. public partial class _Default : System.Web.UI.Page
  16. {
  17. DevExpress.Xpo.Session session;
  18.  
  19. protected void Page_Init(object sender, EventArgs e)
  20. {
  21. string provider = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;//获取数据库连接
  22. IDataLayer datalayer = new SimpleDataLayer(XpoDefault.GetConnectionProvider(provider, AutoCreateOption.DatabaseAndSchema));//建立数据层XPO独有的
  23. session = new DevExpress.Xpo.Session(datalayer); //将数据层和会话绑定
  24. XpoDataSource1.Session = session;
  25. }
  26.  
  27. protected void Page_Load(object sender, EventArgs e)
  28. {
  29.  
  30. }
  31.  
  32. protected void ASPxCheckBox_Hobbies_Init(object sender, EventArgs e)
  33. {
  34. ASPxCheckBox cblHb = sender as ASPxCheckBox;
  35. GridViewEditItemTemplateContainer container = cblHb.NamingContainer as GridViewEditItemTemplateContainer;
  36. string strHobbies = string.Empty;
  37. if (DataBinder.Eval(container.DataItem, "Hobbies") != null)
  38. strHobbies = DataBinder.Eval(container.DataItem, "Hobbies").ToString().Trim();
  39.  
  40. if (strHobbies.Contains(cblHb.Text))
  41. {
  42. cblHb.Checked = true;
  43. }
  44. }
  45.  
  46. protected void ASPxGridView1_RowInserting(object sender, DevExpress.Web.Data.ASPxDataInsertingEventArgs e)
  47. {
  48. //在RowInserting时,将当前时间赋值给“创建时间列”CreateTime赋值
  49. e.NewValues["CreateTime"] = DateTime.Now;
  50.  
  51. GridViewDataColumn columnHobbies = ASPxGridView1.Columns["Hobbies"] as GridViewDataColumn; //取出GridView的Column
  52. //通过ASPxGridView1.FindEditRowCellTemplateControl找出自定义的CheckBox
  53. ASPxCheckBox cbH1 = (ASPxGridView1.FindEditRowCellTemplateControl(columnHobbies, "ASPxCheckBox_H1") as ASPxCheckBox);
  54. ASPxCheckBox cbH2 = (ASPxGridView1.FindEditRowCellTemplateControl(columnHobbies, "ASPxCheckBox_H2") as ASPxCheckBox);
  55. ASPxCheckBox cbH3 = (ASPxGridView1.FindEditRowCellTemplateControl(columnHobbies, "ASPxCheckBox_H3") as ASPxCheckBox);
  56. ASPxCheckBox cbH4 = (ASPxGridView1.FindEditRowCellTemplateControl(columnHobbies, "ASPxCheckBox_H4") as ASPxCheckBox);
  57.  
  58. ArrayList listHobbies = new ArrayList();
  59. if (cbH1.Checked == true)
  60. {
  61. listHobbies.Add(cbH1.Text);
  62. }
  63. if (cbH2.Checked == true)
  64. {
  65. listHobbies.Add(cbH2.Text);
  66. }
  67. if (cbH3.Checked == true)
  68. {
  69. listHobbies.Add(cbH3.Text);
  70. }
  71. if (cbH4.Checked == true)
  72. {
  73. listHobbies.Add(cbH4.Text);
  74. }
  75. //通过 e.NewValues["Hobbies"]赋值
  76. e.NewValues["Hobbies"] = string.Join(",", listHobbies.ToArray());
  77. }
  78. protected void ASPxGridView1_RowUpdating(object sender, DevExpress.Web.Data.ASPxDataUpdatingEventArgs e)
  79. {
  80. //在RowUpdating时,将当前时间赋值给“创建时间列”ModifyTime赋值
  81. e.NewValues["ModifyTime"] = DateTime.Now;
  82.  
  83. GridViewDataColumn columnHobbies = ASPxGridView1.Columns["Hobbies"] as GridViewDataColumn;//取出GridView的Column
  84. //通过ASPxGridView1.FindEditRowCellTemplateControl找出自定义的CheckBox
  85. ASPxCheckBox cbH1 = (ASPxGridView1.FindEditRowCellTemplateControl(columnHobbies, "ASPxCheckBox_H1") as ASPxCheckBox);
  86. ASPxCheckBox cbH2 = (ASPxGridView1.FindEditRowCellTemplateControl(columnHobbies, "ASPxCheckBox_H2") as ASPxCheckBox);
  87. ASPxCheckBox cbH3 = (ASPxGridView1.FindEditRowCellTemplateControl(columnHobbies, "ASPxCheckBox_H3") as ASPxCheckBox);
  88. ASPxCheckBox cbH4 = (ASPxGridView1.FindEditRowCellTemplateControl(columnHobbies, "ASPxCheckBox_H4") as ASPxCheckBox);
  89.  
  90. ArrayList listHobbies = new ArrayList();
  91. if (cbH1.Checked == true)
  92. {
  93. listHobbies.Add(cbH1.Text);
  94. }
  95. if (cbH2.Checked == true)
  96. {
  97. listHobbies.Add(cbH2.Text);
  98. }
  99. if (cbH3.Checked == true)
  100. {
  101. listHobbies.Add(cbH3.Text);
  102. }
  103. if (cbH4.Checked == true)
  104. {
  105. listHobbies.Add(cbH4.Text);
  106. }
  107. //通过 e.NewValues["Hobbies"]赋值
  108. e.NewValues["Hobbies"] = string.Join(",", listHobbies.ToArray());
  109. }
  110.  
  111. protected void ASPxGridView1_CustomCallback(object sender, ASPxGridViewCustomCallbackEventArgs e)
  112. {
  113. string[] strParames = e.Parameters.ToString().Split(new char[] { '@' });
  114. switch (strParames[0])
  115. {
  116. case "delete":
  117. CriteriaOperator criteria = CriteriaOperator.Parse("[UserID]='" + strParames[1] + "'");
  118. Users obj = session.FindObject<Users>(criteria);
  119. obj.Delete();
  120. ASPxGridView1.DataBind();
  121. ASPxGridView1.JSProperties.Remove("cpMsg");
  122. ASPxGridView1.JSProperties.Add("cpMsg", "删除成功");
  123. break;
  124. case "refresh":
  125. ASPxGridView1.DataBind();
  126. ASPxGridView1.JSProperties.Remove("cpMsg");
  127. ASPxGridView1.JSProperties.Add("cpMsg", "刷新成功");
  128. break;
  129. }
  130. }
  131. }

完整源码下载:http://pan.baidu.com/s/1kTj3QDL

博文作者:挪威森林(Coding of life)

博文出处:http://www.cnblogs.com/allenlf/

主要研究:Web开发框架、ORM、WCF、医疗行业软件开发(HRP、EMR、CP、OA)

版权归挪威森林博客园所有,转载请注明出处,谢谢合作,如有错误或不当之处,欢迎指正。

DevExpress ASP.NET 使用经验谈(9)-Dev控件客户端事件 ClientSideEvents的更多相关文章

  1. DevExpress ASP.NET Dev控件客户端事件 ClientSideEvents

    原文地址:http://www.cnblogs.com/allenlf/p/4171189.html

  2. UpdatePanel 控件,客户端事件生命周期踩坑

    <script type="text/javascript" language="javascript"> Sys.WebForms.PageReq ...

  3. DevExpress Cpicturebox或者Dev控件 PictureEdit 按比例的缩放加载图片

    方法一:     如果要加载的图片的长宽比不是太过失衡, 1.可以改变picturebox的SizeMode属性为 PictureBoxSizeMode.StretchImage, 2.或者Dev控件 ...

  4. Dev控件GridView单元格绑定控件

    Dev控件GridView单元格绑定控件 //文本按钮 RepositoryItemButtonEdit btnFields = new RepositoryItemButtonEdit();//创建 ...

  5. DEV控件Grid显示行号

    DEV控件Grid的显示行号需要通过一个事件来设置,具体设置代码为: private void gridView1_CustomDrawRowIndicator(object sender, DevE ...

  6. Dev控件treeList

    之前做过一段时间,当时copy 的别人的代码,这就就把节点给添加了,上次帮同事做也发现了这个问题,当时没有记下来,今天有做,磨了半天,记下来吧. Dev控件treeList 要添加节点第一步是右键添加 ...

  7. DEV 控件使用之:TreeList

    使用DEV控件也有一段时间了,一直想写点东西.最近又使用到TreeList控件,这个控件对于刚使用的人来说确实不好掌握.我想把自己知道的写下来,让还不熟悉的慢慢学会使用,对于会使用的大家交流下.如果有 ...

  8. dev控件 xtraTabbedMdiManager 如何将关闭子窗体改为收回主窗体内

    前言 本文主要讲解 xtraTabbedMdiManager 如何将关闭子窗体改为收回主窗体内,顺便附上Float(浮动)的时候使窗体最大化,及指定只能某一个子窗体能浮动放大. 下面进入正题. 一.首 ...

  9. dev 控件的treelist

    最近项目中要求用dev 控件的treelist 树形控件. 如下图 要求如下: 1:选择父节点后,子节点全部打钩: 2:选择子节点而不选择父节点,则从当前节点的父节点一直到根节点check框都是半选状 ...

随机推荐

  1. JS笔记 入门第四

    小测试: 注意:取消所有的设定可以直接使用 document.getElementById("txt").removeAttribute("style"); 这 ...

  2. OSG选中效果展示

    <OpenSceneGraph三维渲染引擎编程指南>书中选中高亮效果示例.osgFX特效 2.得到鼠标的位置 osgFX特效1.高亮,在开头的时候写了: 2.线框: #include< ...

  3. android小知识之注释模板(转载)

    设置注释模板的入口: Window->Preference->Java->Code Style->Code Template 然后展开Comments节点就是所有需设置注释的元 ...

  4. 窗函数的C语言实现

    一般的讲数字信号处理的书中都会提到窗函数.大多数只会提及其中的几种.这里我把这些窗都用C语言实现了一下,都不复杂,但如果要自己去弄也挺费时间.所有函数都用Matlab验证了.包括以下窗: /*窗类型* ...

  5. java中的集合链表

    java中的集合类有很多种,每个都有自己的一些特点,推荐你专门在这方面研究一下,比方Vector,ArrayList,,LinkedList,Hashtable等,其中你问到的链表,是不是指Linke ...

  6. 利用KVC实现无需协议的委托模式

    在<精通iOS开发>一书中看到的技巧.假设BIDTaskListController是一个列表,点击列表上的一项将会导航到BIDTaskDetailController,在BIDTaskD ...

  7. IOS学习之蓝牙4.0

    1建立中心角色 1 2 3 #import <CoreBluetooth/CoreBluetooth.h>  CBCentralManager *manager;  manager = [ ...

  8. 【中英对照】【EntLib6】【Unity】实验1:使用一个Unity容器

    Lab 1: Using a Unity Container 实验1:使用一个Unity容器 Estimated time to complete this lab: 15 minutes 估计完成时 ...

  9. JQuery DataTable插件

    参考文件: http://blog.csdn.net/xuechongyang/article/details/8424897 http://blog.csdn.net/llhwin2010/arti ...

  10. Objective-c 中的变量

    OC中的语言变量,按作用域可分为两种:局部变量和全局变量. 局部变量:也称为内部变量,局部变量是在方法内部声明的.其作用域仅限于方法内,离开该方法再使用这个变量就是非法的. 全局变量:也称为外部变量, ...