分享一个刚刚写的联动DropDownList控件 欢迎拍砖
前几天泡论坛的时候发现有很多人问关于联动DropDownList的问题 在下不才写了个支持联动的DropDownList服务器控件 方便大家 代码有点儿不好懂我会写上注释 2楼上调用代码 欢迎拍砖
源代码:
- C# code
using System;using System.Collections.Generic;using System.ComponentModel;using System.Linq;using System.Text;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;[assembly: TagPrefix("WebApplication", "MyControl")]namespace WebApplication1{ [ToolboxData("<{0}:LinkedDropDownList runat=server></{0}:LinkedDropDownList>")] public class LinkedDropDownList : DropDownList//继承自基本的DropDownList { private DropDownList _linkedDropDownList; public LinkedDropDownList() { this.SelectedIndexChanged += new EventHandler(LinkedDropDownList_SelectedIndexChanged);//添加自己的SelectedIndexChanged事件 this.AutoPostBack = true;//强制设置自己的AutoPostBack为true } //下面两个事件都作为获取数据源的事件 public event EventHandler BindData;//这个事件为绑定父DropDownList public event Action<object, DropDownListIndexChangeEventArg> BindLinkedData;//这个事件为绑定子DropDownList protected void LinkedDropDownList_SelectedIndexChanged(object sender, EventArgs e) { if (this.BindLinkedData != null) { this._linkedDropDownList = this.NamingContainer.FindControl(this.NextDropDownListID) as DropDownList;//从控件容器中找出子下拉菜单 var newE = new DropDownListIndexChangeEventArg(this.SelectedValue, this.SelectedItem.Text, this.SelectedIndex,this._linkedDropDownList); BindLinkedData(this, newE); } //如果子DropDownList本身也为联动DropDownList 执行子DropDownList的绑定 var next = this.NamingContainer.FindControl(this.NextDropDownListID) as LinkedDropDownList; if (next != null) { next.OnSelectedIndexChanged(EventArgs.Empty); } } //重写OnLoad使得可以发生数据绑定 protected override void OnLoad(EventArgs e) { base.OnLoad(e); if (this.BindData != null && !Page.IsPostBack) { BindData(this, EventArgs.Empty); this.SelectedIndex = 0; } if (this.BindLinkedData != null &&!Page.IsPostBack) { this._linkedDropDownList = this.NamingContainer.FindControl(this.NextDropDownListID) as DropDownList; var newE = new DropDownListIndexChangeEventArg(this.SelectedValue, this.SelectedItem.Text, this.SelectedIndex, this._linkedDropDownList); BindLinkedData(this, newE); } } //子DropDownList的ID public string NextDropDownListID { get { return ViewState[this.ID + "LinkedDropDownList"] as string;//加上自身的ID做唯一标示 } set { ViewState[this.ID + "LinkedDropDownList"] = value; } } } //事件参数 方便绑定子菜单时候得到数据源绑定参数 public class DropDownListIndexChangeEventArg : EventArgs { private readonly string _selectedValue = null; private readonly string _selectedText = null; private readonly int _selectedIndex; private readonly DropDownList _nextDropDownList = null; public DropDownListIndexChangeEventArg(string selectedValue, string selectedText, int selectedIndex,DropDownList nextDropDownList) { this._selectedValue = selectedValue; this._selectedText = selectedText; this._selectedIndex = selectedIndex; this._nextDropDownList = nextDropDownList; } public string SelectedValue { get { return this._selectedValue; } } public string SelectedText { get { return this._selectedText; } } public int SelectedIndex { get { return this._selectedIndex; } } public DropDownList NextDropDownList { get { return this._nextDropDownList; } } }}
[解决办法]
不错
学习下
[解决办法]
无刷新联动貌似没有这么复杂.
[解决办法]
先回复,在看看
[解决办法]
我觉得无刷新用jq+ajax还是挺快的。。。
[解决办法]
不错,支持分享!!!
[解决办法]
支持分享。。。
不过这么写多少有点麻烦。。。。
[解决办法]
直接用js不是挺好么?
为什么硬要服务器控件呢?
疑惑!!!
根据自己在开发时遇到的问题感觉只是状态保持方面比较方便!!!
[解决办法]
[解决办法]
不用这么麻烦吧?
代码太多了
ajax其实挺简单的。
[解决办法]
楼主好人,多谢分享
[解决办法]
超强啊!顶起
[解决办法]
顶, 多谢分享。
ajax还是比较简单的,楼主在尝试开源一个。哈哈
[解决办法]
鞋搂着分享!学习咯。。。
[解决办法]
楼主真强。
[解决办法]
哥们,很多年就不再用服务器控件了。
[解决办法]
感觉现在写服务器控件没啥意思了,以前还会因为系统自带的服务器不适用,然后重写之类的。现在感觉没有多大用处了。特别是做网站的,更没啥意思了
[解决办法]
这个还可以的,我个人觉得
[解决办法]
还用服务器控件
[解决办法]
还是习惯ajax的
[解决办法]
可以给手机web用。
[解决办法]
值得好好学下
[解决办法]
还是有点复杂,希望楼主改的再简单点...
现在只用mvc3+jquery
[解决办法]
不过能写那么多代码来分享,小弟还是佩服的,谢谢分享
[解决办法]
[解决办法]
没有积分 下载不了
[解决办法]
支持分享!!!
[解决办法]
分享快乐
[解决办法]
[解决办法]
感谢分享
[解决办法]
thank you for open code.
mark
------解决方案--------------------
收藏,备用
[解决办法]
支持一个,
[解决办法]
支持下!
[解决办法]
多谢分享
[解决办法]
[解决办法]
学习,收藏,备用。
[解决办法]
先回复,回头再仔细看下
[解决办法]
没必要这么复杂的
[解决办法]
虽然都是用js写联动 但是也顶一下
这里涉及到用户控件 事件等
[解决办法]
分享不错。
[解决办法]
支持分享是必须的,LZ用心了
[解决办法]
LZ用心了 支持分享!!!
[解决办法]
分享不错。
[解决办法]
独乐乐不如众乐乐
[解决办法]
太麻烦了吧。。。。。不过定下
[解决办法]
为什么不用Jquery