需求:设计这样一个页面,在页面上可以自由选择和展示各省份下城市?

思路:一次性查询出所需的记录(查询数据库的操作不宜写到 C# 代码的循环语句中),并保存到全局变量中,之后根据条件过滤出需要的。可以在 WebForm 页面中,添加相应的 ASP.NET 服务器控件:GridView 和 CheckBoxList 来实现,只需绑定相应的数据即可。

前台页面:

  1. <%@ Page Language="C#" AutoEventWireup="true" CodeFile="ProvinceCityConfig.aspx.cs" Inherits="ProvinceCityConfig"%>
  2. <!DOCTYPE html>
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <head runat="server">
  5. <title>选择各省份下的城市</title>
  6. <link rel="stylesheet" type="text/css" href="../css/basic.css" />
  7. <script src="../jQuery/jquery-1.5.1.js" type="text/javascript"></script>
  8. <script language="javascript" type="text/javascript">
  9. $(function () {
  10. //表格隔行变色
  11. $("table.queryList_font12 th").css("background", "#f2f2f2");
  12. $("table.queryList_font12 .item_td_center:even").css("background", "#f0fafa");
  13. $("table.queryList_font12 .item_td:even").css("background", "#f0fafa");
  14. });
  15. </script>
  16. </head>
  17. <body>
  18. <form id="form1" runat="server">
  19. <dl class="si_info">
  20. <dd class="marginleft24">
  21. <dl>
  22. <dt>请选择各省份下的城市</dt>
  23. </dl>
  24. </dd>
  25. </dl>
  26. <div class="content">
  27. <div style="border: 1px solid silver; max-height: 400px; overflow-y: auto; overflow-x: hidden;" id="divList" runat="server">
  28. <asp:GridView ID="gvList" runat="server" Width="100%" Height="100%" DataKeyNames="PROVINCE_SEQ"
    OnRowDataBound="gvItem_RowCommand" CssClass="queryList_font12 mytable" BorderWidth="1px" AutoGenerateColumns="False">
  29. <HeaderStyle CssClass="gv_header" />
  30. <Columns>
  31. <asp:TemplateField HeaderText="省份">
  32. <HeaderStyle CssClass="header_th_center" Wrap="False" Width="12%" Font-Size="12px" />
  33. <ItemStyle CssClass="item_td_center" Width="15%" />
  34. <ItemTemplate>
  35. <asp:Label ID="province" runat="server" ToolTip='<%#Eval("PROVINCE_SEQ") %>'
    Text='<%# Eval("PROVINCE_CODE") %>'></asp:Label>
  36. </ItemTemplate>
  37. </asp:TemplateField>
  38. <asp:TemplateField HeaderText="城市">
  39. <HeaderStyle CssClass="header_th_center" Wrap="False" Width="85%" Font-Size="12px" />
  40. <ItemStyle CssClass="item_td" Wrap="False" Width="85%" />
  41. <ItemTemplate>
  42. <asp:CheckBoxList ID="city" runat="server" RepeatLayout="Table" RepeatDirection="Horizontal" RepeatColumns="10" ></asp:CheckBoxList>
  43. </ItemTemplate>
  44. </asp:TemplateField>
  45. </Columns>
  46. <EmptyDataTemplate />
  47. <PagerSettings Visible="False" />
  48. <EmptyDataRowStyle HorizontalAlign="Center" />
  49. </asp:GridView>
  50. </div>
  51. <table class="inputlist_table" border="0" cellspacing="0" cellpadding="0" style="width: 100%;">
  52. <tr>
  53. <td align="center">
  54. <asp:Button ID="btnSave" runat="server" Text="保存"OnClick="btnSave_Click" CssClass="ok" />
  55. </td>
  56. </tr>
  57. </table>
  58. </div>
  59. </form>
  60. </body>
  61. </html>

后台代码文件:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Web.UI.WebControls;
  4. using System.Data;
    using System.Data.Common;
  5.  
  6. public partial class ProvinceCityConfig : PageBase
  7. {
  8. #region Fields
  9.  
  10. private ProvinceCityRelation provinceCitySevice = new ProvinceCityRelation();
  11. protected log4net.ILog log = log4net.LogManager.GetLogger("ExceptionLogger");
  12. private DataSet allCityCache = new DataSet();
  13. private DataSet selectCityCache = new DataSet();
  14.  
  15. #endregion Fields
  16.  
  17. #region Events
  18.  
  19. protected void Page_Load(object sender, EventArgs e)
  20. {
  21. Response.Expires = -;
  22. try
  23. {
  24. OpUserEntity opUser = new OpUserEntity();
  25. opUser.userID = this.CurrentUser.Username;
  26. opUser.compSEQ = this.CurrentUser.CompanySeq;
  27. buscity.opUser = opUser;
  28.  
  29. if (!IsPostBack)
  30. {
  31. ShowData();
  32. }
  33. }
  34. catch (Exception ex)
  35. {
  36. log.Error("[ProvinceCityConfig::Page_Load]" + ex);
  37. MessageBox.Show(this, "页面加载失败,请重试或联系客服人员!");
  38. }
  39. }
  40.  
  41. /// <summary>
  42. /// 保存省份与城市的对应关系
  43. /// </summary>
  44. /// <param name="sender"></param>
  45. /// <param name="e"></param>
  46. protected void btnSave_Click(object sender, EventArgs e)
  47. {
  48. DbTransaction tran = SqlHelper.OpenTransaction();
  49. List<ProvinceCityRelationDto> list = new List<ProvinceCityRelationDto>();
  50.  
  51. //依次获取DataGridView中各控件的值,并添加到list中
  52. for (int i = ; i < gvList.Rows.Count; i++)
  53. {
  54. string Province = (gvList.Rows[i].Cells[].Controls[] as Label).ToolTip;
  55. CheckBoxList cityList = gvList.Rows[i].Cells[].Controls[] as CheckBoxList;
  56.  
  57. //每家省份是否选中了一个城市
  58. bool hasOne = false;
  59.  
  60. for (int j = ; j < cityList.Items.Count; j++)
  61. {
  62. if (cityList.Items[j].Selected)
  63. {
  64. hasOne = true;
  65. ProvinceCityRelationDto dto = new ProvinceCityRelationDto();
  66. decimal configSeq = ;
  67. decimal citySeq = ;
  68. decimal.TryParse(Province, out configSeq);
  69. decimal.TryParse(cityList.Items[j].Value, out citySeq);
  70. dto.BusinessConfigSeq = configSeq;
  71. dto.cityDictSeq = citySeq;
  72. list.Add(dto);
  73. }
  74. }
  75.  
  76. if (!hasOne)
  77. {
  78. MessageBox.Show(this, "每个省份至少选择一个城市才能保存");
  79. return;
  80. }
  81. }
  82.  
  83. //提交保存
  84. SuperResult result = provinceCityRelation.Save(list, tran);
  85. if (result.opResult == ResultValue.Succ)
  86. {
  87. MessageBox.Show(this, "保存成功");
  88. tran.Commit();
  89. ShowData();
  90. }
  91. else
  92. {
  93. MessageBox.Show(this, "系统异常,请联系客服人员");
  94. tran.Rollback();
  95. ShowData();
  96. }
  97. }
  98.  
  99. protected void gvItem_RowCommand(object sender, GridViewRowEventArgs e)
  100. {
  101. if (e.Row.RowType == DataControlRowType.DataRow)
  102. {
  103. CheckBoxList cityList = (CheckBoxList)e.Row.FindControl("city");
  104. if (cityList != null)
  105. {
  106. string ProvinceSeq = gvList.DataKeys[e.Row.RowIndex].Value.ToString();
  107. cityList.DataSource = allcityCache.Tables[].DefaultView;
  108. cityList.DataValueField = "CITY_SEQ";
  109. cityList.DataTextField = "CITY_CODE";
  110. cityList.DataBind();
  111. if (!DataHelper.IsEmpty(selectCityCache))
  112. {
  113. //用DataSet一次性查询出所有记录,然后根据条件来过滤出所需要的数据
    DataRow[] correctRows = selectCityCache.Tables[0].Select("PROVINCE_SEQ = " + ProvinceSeq, "CITY_CODE ASC");
  114. foreach (DataRow row in correctRows)
  115. {
  116. //checkbox显示为“已选中”
  117. if (cityList.Items.FindByValue(row["CITY_SEQ"].ToString()) != null)
  118. {
  119. cityList.Items.FindByValue(row["CITY_SEQ"].ToString()).Selected = true;
  120. }
  121. }
  122. }
  123. }
  124. }
  125. }
  126. #endregion
  127.  
  128. #region Methods
  129.  
  130. /// <summary>
  131. /// 查询相关的数据
    /// 思路:先查出所有数据,然后根据条件筛选出所需信息
  132. /// </summary>
  133. private void ShowData()
  134. {//查询所有的城市
  135. string allCitySql = @"SELECT P.CITY_SEQ,P.CITY_CODE FROM CITY P WHERE P.STATUS =1 ORDER BY P.CITY_CODE ASC";
  136. //结果保存到全局变量中
  137. allCityCache = SqlHelper.ExecuteDataSet(allCitySql);
  138.  
  139. //查询所有的省份和城市的匹配信息
  140. if (!DataHelper.IsEmpty(allCityCache))
  141. {
  142. string selectCitySql = @"SELECT T.PROVINCE_SEQ,T.CITY_SEQ,P.CITY_CODE,P.STATUS
  143. FROM PROVINCE_CITY_REF T LEFT JOIN CITYP P ON P.CITY_SEQ = T.CITY_SEQ
  144. WHERE P.STATUS = 1";
  145. DataSet selectCity = SqlHelper.ExecuteDataSet(selectCitySql);
  146.  
  147. //结果保存到全局变量中
  148. selectCityCache.Merge(selectCity);
  149. //selectcityCache.Tables.Add(selectCity);
  150. }
  151.  
  152. //查询所有的省份,并绑定到gridview
  153. string sqlProvince = @"SELECT B.PROVINCE_SEQ, B.PROVINCE_CODE FROM PROVINCE B WHERE B.STATUS = 1 ORDER BY B.PROVINCE_CODE ASC";
  154. DataSet allProvince = SqlHelper.ExecuteDataSet(sqlProvince);
  155. //绑定省份到gridview的第一列
  156. gvList.DataSource = allProvince.Tables[];
  157. gvList.DataBind();
  158.  
  159. //数据为空时,显示默认的表头
  160. if (dsProvince.Tables[].Rows.Count <= )
  161. {
  162. BaseDataTool.AddTableTop(this.gvList);
  163. }
  164. }
  165.  
  166. #endregion
  167. }

最终效果如下:

ASP.NET GridView 控件绑定 CheckBoxList的更多相关文章

  1. 在aspx页动态加载ascx页面内容,给GridView控件绑定数据

    在aspx页动态加载ascx页面内容 //加载ascx页面内容Control c1 = this.Page.LoadControl("WebUserControl1.ascx"); ...

  2. asp.net GridView控件的列属性

    BoundField 默认的数据绑定类型,通常用于显示普通文本 CheckBoxField 显示布尔类型的数据.绑定数据为TRUE时,复选框数据绑定列为选中状态:绑定数据为FALSE时,则显示未选中状 ...

  3. Asp.net GridView控件使用纪要

    1:数据绑定 GridView 支持数据绑定的数据源格式比较多,例如可以使用ObjectDataSource绑定数据源, Dataset,datatable,List<T>等 2:列绑定 ...

  4. ASP.net gridview控件RowEditing,RowUpdating,RowDeleting,RowCancelingEdit事件的触发

    一.说明 在gridview中删除和更新行是常用的操作,RowEditing,RowUpdating,RowDeleting,RowCancelingEdit等事件是删除更新对应的事件.如果想要使用自 ...

  5. asp.net TreeView控件绑定数据库显示信息

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

  6. 获取Asp.net GridView控件当中总的记录数量

    问题: 解决方案: SqlDataSource 或 AccessDataSource的selected事件的e.AffectedRows为查询操作返回的数据数目.(这个是在gridview分页情况下采 ...

  7. asp.net GridView控件中诗选全选和全不选功能

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

  8. 初始ASP.NET数据控件GridView

    使用GridView控件绑定数据源 GridView控件个人认为就是数据表格控件,它以表格的形式显示数据源中的数据.每列表示一个字段,每行表示一条记录.     GridView控件支持在页面有一下功 ...

  9. Repeater, DataList, 和GridView控件的区别

    http://blog.sina.com.cn/s/blog_646dc75c0100h5p6.html http://www.cnblogs.com/phone/archive/2010/09/15 ...

随机推荐

  1. Linux下汇编语言学习笔记12 ---

    这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...

  2. python 安装依赖几个问题---HttpScan

    https://blog.csdn.net/chenggong2dm/article/details/61923420 https://www.cnblogs.com/caochuangui/p/59 ...

  3. DELPHI IDFTP

    FTP是一个标准协议,它是在计算机和网络之间交换文件的最简单的方法. FTP也是应用TCP/IP协议的应用协议标准.FTP通常于将作者的文件上传至服务器,或从服务器上下传文件的一种普遍的使用方式作为用 ...

  4. PostgreSQL及PostGIS使用

    基础知识 参考文档:http://www.postgis.net/docs/ PostGIS支持的GIS对象是OpenGIS Consortium(OGC)定义的“简单特征”的超集.OpenGIS规范 ...

  5. Android GIS开发系列-- 入门季(8) Json与Geometry的相互转换

    在Android中json数据十分普遍,也很实用,在Arcgis中也同样支持Json数据,Json与Geometry可以相互转换,达到我们想要的数据. 一.Geometry转换成Json数据 这个实现 ...

  6. IOS-Storyboard控制器切换之Modal(1)

    Modal模式是指模态切换.新开的界面会挡住之前的界面,使之不能获取焦点. 创建一个singleView模板的程序,打开storyboard文件.拖动2个UIViewController到界面中.按住 ...

  7. cocos2d-x+lua开发模式下编辑器的选择

    原本打算直接用CocosIDE的,毕竟是官方出品,并且支持Android远程调试,windows下的调试也非常方便,调试的信息也非常全,智能提示也不错.好了,一切看上去非常完美,可是它有一个致命缺陷, ...

  8. 推荐IOS开发3个工具:Homebrew、TestFight、Crashlytics-b

    1. Homebrew 什么是Homebrew? Homebrew is the easiest and most flexible way to install the UNIX tools App ...

  9. Node后台使用mysql并开启事务

    如题:node后台使用mysql数据库,并使用事务来管理数据库操作. 这里主要讲一个事务的封装并写了一个INSERT 插入操作. code: 基础code: db.config.js const my ...

  10. Wordpress 建站(一)

    去年在美国的justhost上买了两个域名(shanyexuanyu.com  和 chenjinyu.net.shanyexuanyu.com是给一位马来西亚的佛教徒朋友做的站点. 她镜头下佛教的文 ...