ASP.NET GridView 控件绑定 CheckBoxList
需求:设计这样一个页面,在页面上可以自由选择和展示各省份下城市?
思路:一次性查询出所需的记录(查询数据库的操作不宜写到 C# 代码的循环语句中),并保存到全局变量中,之后根据条件过滤出需要的。可以在 WebForm 页面中,添加相应的 ASP.NET 服务器控件:GridView 和 CheckBoxList 来实现,只需绑定相应的数据即可。
前台页面:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="ProvinceCityConfig.aspx.cs" Inherits="ProvinceCityConfig"%>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>选择各省份下的城市</title>
<link rel="stylesheet" type="text/css" href="../css/basic.css" />
<script src="../jQuery/jquery-1.5.1.js" type="text/javascript"></script>
<script language="javascript" type="text/javascript">
$(function () {
//表格隔行变色
$("table.queryList_font12 th").css("background", "#f2f2f2");
$("table.queryList_font12 .item_td_center:even").css("background", "#f0fafa");
$("table.queryList_font12 .item_td:even").css("background", "#f0fafa");
});
</script>
</head>
<body>
<form id="form1" runat="server">
<dl class="si_info">
<dd class="marginleft24">
<dl>
<dt>请选择各省份下的城市</dt>
</dl>
</dd>
</dl>
<div class="content">
<div style="border: 1px solid silver; max-height: 400px; overflow-y: auto; overflow-x: hidden;" id="divList" runat="server">
<asp:GridView ID="gvList" runat="server" Width="100%" Height="100%" DataKeyNames="PROVINCE_SEQ"
OnRowDataBound="gvItem_RowCommand" CssClass="queryList_font12 mytable" BorderWidth="1px" AutoGenerateColumns="False">
<HeaderStyle CssClass="gv_header" />
<Columns>
<asp:TemplateField HeaderText="省份">
<HeaderStyle CssClass="header_th_center" Wrap="False" Width="12%" Font-Size="12px" />
<ItemStyle CssClass="item_td_center" Width="15%" />
<ItemTemplate>
<asp:Label ID="province" runat="server" ToolTip='<%#Eval("PROVINCE_SEQ") %>'
Text='<%# Eval("PROVINCE_CODE") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="城市">
<HeaderStyle CssClass="header_th_center" Wrap="False" Width="85%" Font-Size="12px" />
<ItemStyle CssClass="item_td" Wrap="False" Width="85%" />
<ItemTemplate>
<asp:CheckBoxList ID="city" runat="server" RepeatLayout="Table" RepeatDirection="Horizontal" RepeatColumns="10" ></asp:CheckBoxList>
</ItemTemplate>
</asp:TemplateField>
</Columns>
<EmptyDataTemplate />
<PagerSettings Visible="False" />
<EmptyDataRowStyle HorizontalAlign="Center" />
</asp:GridView>
</div>
<table class="inputlist_table" border="0" cellspacing="0" cellpadding="0" style="width: 100%;">
<tr>
<td align="center">
<asp:Button ID="btnSave" runat="server" Text="保存"OnClick="btnSave_Click" CssClass="ok" />
</td>
</tr>
</table>
</div>
</form>
</body>
</html>
后台代码文件:
using System;
using System.Collections.Generic;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.Common; public partial class ProvinceCityConfig : PageBase
{
#region Fields private ProvinceCityRelation provinceCitySevice = new ProvinceCityRelation();
protected log4net.ILog log = log4net.LogManager.GetLogger("ExceptionLogger");
private DataSet allCityCache = new DataSet();
private DataSet selectCityCache = new DataSet(); #endregion Fields #region Events protected void Page_Load(object sender, EventArgs e)
{
Response.Expires = -;
try
{
OpUserEntity opUser = new OpUserEntity();
opUser.userID = this.CurrentUser.Username;
opUser.compSEQ = this.CurrentUser.CompanySeq;
buscity.opUser = opUser; if (!IsPostBack)
{
ShowData();
}
}
catch (Exception ex)
{
log.Error("[ProvinceCityConfig::Page_Load]" + ex);
MessageBox.Show(this, "页面加载失败,请重试或联系客服人员!");
}
} /// <summary>
/// 保存省份与城市的对应关系
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnSave_Click(object sender, EventArgs e)
{
DbTransaction tran = SqlHelper.OpenTransaction();
List<ProvinceCityRelationDto> list = new List<ProvinceCityRelationDto>(); //依次获取DataGridView中各控件的值,并添加到list中
for (int i = ; i < gvList.Rows.Count; i++)
{
string Province = (gvList.Rows[i].Cells[].Controls[] as Label).ToolTip;
CheckBoxList cityList = gvList.Rows[i].Cells[].Controls[] as CheckBoxList; //每家省份是否选中了一个城市
bool hasOne = false; for (int j = ; j < cityList.Items.Count; j++)
{
if (cityList.Items[j].Selected)
{
hasOne = true;
ProvinceCityRelationDto dto = new ProvinceCityRelationDto();
decimal configSeq = ;
decimal citySeq = ;
decimal.TryParse(Province, out configSeq);
decimal.TryParse(cityList.Items[j].Value, out citySeq);
dto.BusinessConfigSeq = configSeq;
dto.cityDictSeq = citySeq;
list.Add(dto);
}
} if (!hasOne)
{
MessageBox.Show(this, "每个省份至少选择一个城市才能保存");
return;
}
} //提交保存
SuperResult result = provinceCityRelation.Save(list, tran);
if (result.opResult == ResultValue.Succ)
{
MessageBox.Show(this, "保存成功");
tran.Commit();
ShowData();
}
else
{
MessageBox.Show(this, "系统异常,请联系客服人员");
tran.Rollback();
ShowData();
}
} protected void gvItem_RowCommand(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
CheckBoxList cityList = (CheckBoxList)e.Row.FindControl("city");
if (cityList != null)
{
string ProvinceSeq = gvList.DataKeys[e.Row.RowIndex].Value.ToString(); cityList.DataSource = allcityCache.Tables[].DefaultView;
cityList.DataValueField = "CITY_SEQ";
cityList.DataTextField = "CITY_CODE";
cityList.DataBind(); if (!DataHelper.IsEmpty(selectCityCache))
{
//用DataSet一次性查询出所有记录,然后根据条件来过滤出所需要的数据
DataRow[] correctRows = selectCityCache.Tables[0].Select("PROVINCE_SEQ = " + ProvinceSeq, "CITY_CODE ASC");
foreach (DataRow row in correctRows)
{
//checkbox显示为“已选中”
if (cityList.Items.FindByValue(row["CITY_SEQ"].ToString()) != null)
{
cityList.Items.FindByValue(row["CITY_SEQ"].ToString()).Selected = true;
}
}
}
}
}
} #endregion #region Methods /// <summary>
/// 查询相关的数据
/// 思路:先查出所有数据,然后根据条件筛选出所需信息
/// </summary>
private void ShowData()
{//查询所有的城市
string allCitySql = @"SELECT P.CITY_SEQ,P.CITY_CODE FROM CITY P WHERE P.STATUS =1 ORDER BY P.CITY_CODE ASC";
//结果保存到全局变量中
allCityCache = SqlHelper.ExecuteDataSet(allCitySql); //查询所有的省份和城市的匹配信息
if (!DataHelper.IsEmpty(allCityCache))
{
string selectCitySql = @"SELECT T.PROVINCE_SEQ,T.CITY_SEQ,P.CITY_CODE,P.STATUS
FROM PROVINCE_CITY_REF T LEFT JOIN CITYP P ON P.CITY_SEQ = T.CITY_SEQ
WHERE P.STATUS = 1";
DataSet selectCity = SqlHelper.ExecuteDataSet(selectCitySql); //结果保存到全局变量中
selectCityCache.Merge(selectCity);
//selectcityCache.Tables.Add(selectCity);
} //查询所有的省份,并绑定到gridview
string sqlProvince = @"SELECT B.PROVINCE_SEQ, B.PROVINCE_CODE FROM PROVINCE B WHERE B.STATUS = 1 ORDER BY B.PROVINCE_CODE ASC";
DataSet allProvince = SqlHelper.ExecuteDataSet(sqlProvince);
//绑定省份到gridview的第一列
gvList.DataSource = allProvince.Tables[];
gvList.DataBind(); //数据为空时,显示默认的表头
if (dsProvince.Tables[].Rows.Count <= )
{
BaseDataTool.AddTableTop(this.gvList);
}
} #endregion
}
最终效果如下:

ASP.NET GridView 控件绑定 CheckBoxList的更多相关文章
- 在aspx页动态加载ascx页面内容,给GridView控件绑定数据
在aspx页动态加载ascx页面内容 //加载ascx页面内容Control c1 = this.Page.LoadControl("WebUserControl1.ascx"); ...
- asp.net GridView控件的列属性
BoundField 默认的数据绑定类型,通常用于显示普通文本 CheckBoxField 显示布尔类型的数据.绑定数据为TRUE时,复选框数据绑定列为选中状态:绑定数据为FALSE时,则显示未选中状 ...
- Asp.net GridView控件使用纪要
1:数据绑定 GridView 支持数据绑定的数据源格式比较多,例如可以使用ObjectDataSource绑定数据源, Dataset,datatable,List<T>等 2:列绑定 ...
- ASP.net gridview控件RowEditing,RowUpdating,RowDeleting,RowCancelingEdit事件的触发
一.说明 在gridview中删除和更新行是常用的操作,RowEditing,RowUpdating,RowDeleting,RowCancelingEdit等事件是删除更新对应的事件.如果想要使用自 ...
- asp.net TreeView控件绑定数据库显示信息
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...
- 获取Asp.net GridView控件当中总的记录数量
问题: 解决方案: SqlDataSource 或 AccessDataSource的selected事件的e.AffectedRows为查询操作返回的数据数目.(这个是在gridview分页情况下采 ...
- asp.net GridView控件中诗选全选和全不选功能
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...
- 初始ASP.NET数据控件GridView
使用GridView控件绑定数据源 GridView控件个人认为就是数据表格控件,它以表格的形式显示数据源中的数据.每列表示一个字段,每行表示一条记录. GridView控件支持在页面有一下功 ...
- Repeater, DataList, 和GridView控件的区别
http://blog.sina.com.cn/s/blog_646dc75c0100h5p6.html http://www.cnblogs.com/phone/archive/2010/09/15 ...
随机推荐
- Thinkphp5.0 控制器向视图view赋值
Thinkphp5.0 控制器向视图view的赋值 方式一(使用fetch()方法的第二个参数赋值): <?php namespace app\index\controller; use thi ...
- 无法打开物理文件 "X.mdf"。操作系统错误 5:"5(拒绝访问。)"。 (Microsoft SQL Server,错误: 5120)解决
环境 SQLServer 2008 R2 问题 附加数据库出现“无法打开物理文件 "X.mdf".操作系统错误 5:"5(拒绝访问.)". (Microsoft ...
- 远程调试 Android 设备使用入门(谷歌翻译版)
移动前端调试方案(Android + Chrome 实现远程调试) 目录 要求 第 1 步:发现您的 Android 设备 第 2 步:从您的开发计算机调试 Android 设备上的内容. 更多操作: ...
- 07-js数组
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- Eclipse使用Maven时,修改默认中央仓库后的配置报错找不到包的问题解决
一般在公司内容配置Maven时会在settings.xml文件下配置私服nexus地址,那么修改完之后在Eclipse中如果不指定用户目录级别的settings.xml文件会出现找不到包的问题. se ...
- dtrace-conf 2016
https://www.joyent.com/about/events/2016/dtrace-conf
- JFinal Weixin 微信极速 SDK
原文:https://git.oschina.net/jfinal/jfinal-weixin
- 链表倒置,这个还是考验仔细程度,第一遍还没做对 —— 剑指Offer
https://www.nowcoder.net/practice/75e878df47f24fdc9dc3e400ec6058ca?tpId=13&tqId=11168&tPage= ...
- 使用OpenCV读、操作、写图像并与bash合作对某个文件夹下全部图像进行相似处理
我门要对某个文件夹下全部图像文件进行统一处理,假设图像的数量过多.那么手动地一张张处理就会显得有些麻烦.本文使用OpenCV和bash来完毕我们指定的任务. 任务 将文件夹A下的全部统一格式的jpg图 ...
- vs2013生成lib
引擎cocos2d-x-3.1.1 一. cocos创建一个项目.随便是lua还是cpp.这里用cpp演示 二.创建完毕之后执行下项目 之后创建两个类.例如以下 TestLib.cpp文件 #incl ...