分享一个好用的n级联动下拉列表框(有源码、有省市区县数据库)
特点:
1、 使用js方法,把需要的数据一次性写入到页面里,然后用js来实现联动的效果。
2、 支持n级。
3、 封装成了服务器控件,所以使用非常简单。
4、 支持在回发的时候保持状态。
5、 支持修改记录的时候设置默认选项。
6、 页面设置比较灵活。
7、 采用DataSet作为数据的容器。
缺点:
1、 由于是把需要的数据一次性写入页面交给客户端,所以在网速比较慢的时候,显示页面需要比较长的时间。
可以改进的地方:
1、 引入json,可以把需要的数据放到单独的js文件里面,这样可以减少带宽的压力。
2、 Ajax,按需所取。每次只加载需要的数据。
在线演示:
使用省、市、区县的数据库进行演示。由于服务器的网速很慢,所以需要等待一下,等页面完全下载完毕之后,才可以使用,否则会出现js脚本错误。页面完全下载完毕之后就没有js脚本错误了。
n级联动下拉列表框在线演示
1、 二级联动的演示
以省、市联动为例演示。提交表单后可以保持状态,可以设置选项。
二级联动在线演示
protected void Page_Load(object sender, EventArgs e) { DataAccessLibrary dal = DALFactory.CreateDAL(); string sql = @"SELECT AreaID AS id, AreaName AS txt FROM Base_Area WHERE (AreaCode LIKE '__0000') SELECT ParentID,AreaID AS id, AreaName AS txt FROM Base_Area WHERE (AreaCode LIKE '____00') AND (AreaCode NOT LIKE '__0000') "; DataSet ds = dal.ExecuteFillDataSet(sql); this.lst_Area.DataSource = ds; this.lst_Area.DataBind(); } protected void btn_Save_Click(object sender, EventArgs e) { //提交表单后,获取联动下拉列表框的选项值 //获取ID string itemID = this.lst_Area.SelectedValue; this.txt_Value.Text = itemID; //获取text string itemText = this.lst_Area.SelectedText; this.txt_Value.Text = itemID; } protected void btn_SetItemSelect_Click(object sender, EventArgs e) { //设置下拉列表框的选项 string itemID = this.txt_SetID.TextTrimNone; this.lst_Area.SetSelectedValue(itemID); } protected void Page_Load(object sender, EventArgs e) { DataAccessLibrary dal = DALFactory.CreateDAL(); string sql = @"SELECT AreaID AS id, AreaName AS txt FROM Base_Area WHERE (AreaCode LIKE '__0000') SELECT ParentID,AreaID AS id, AreaName AS txt FROM Base_Area WHERE (AreaCode LIKE '____00') AND (AreaCode NOT LIKE '__0000') SELECT ParentID,AreaID AS id, AreaName AS txt FROM Base_Area WHERE (AreaCode NOT LIKE '__0000') AND (AreaCode NOT LIKE '____00') "; DataSet ds = dal.ExecuteFillDataSet(sql); this.lst_Area.DataSource = ds; this.lst_Area.DataBind(); } if (!Page.IsPostBack) { //6,568,572 是“辽宁省,抚顺市,望花区”对于的ID //实际项目中,是从数据库里获取,然后设置,这里只是一个实例 this.lst_Area.SetSelectedValue("6,568,572"); } protected virtual void SetHTML() { //一行里,下拉列表框前面加说明的方法 string[] html = new string[6]; html[0] = "省份:"; html[2] = "城市:"; html[4] = "区/县:"; this.lst_Area.ListHTML = html; }
5、 Table形式的表单
在表单里,如果是table形式的话,一行里只想显示一个列表框,那么要如何设置呢?
多级联动在线演示
省份、城市、区县各占一行的形式。
protected override void SetHTML() { //多行表格的方法 string[] html = new string[6]; html[0] = ""; html[1] = "</td></tr>"; html[2] = "<tr><td align=\"right\">城市:</td><td>"; html[3] = "</td></tr>"; html[4] = "<tr><td align=\"right\">区/县:</td><td>"; this.lst_Area.ListHTML = html; } protected override void SetHTML() { //多行表格的方法 string[] html = new string[6]; html[0] = ""; html[1] = "</div>"; html[2] = "<div class=\"formLeft\">城市:</div><div class=\"formRight\">"; html[3] = "</div>"; html[4] = "<div class=\"formLeft\">区/县:</div><div class=\"formRight\">"; this.lst_Area.ListHTML = html; }
[解决办法]
这东西我做过,WINFORM程序的。不需要数据库,速度还行。
[解决办法]
多练习、优化、改进,肯定会成为一个非常不错的控件的!
加油!
[解决办法]
真正一步到位的!