首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

分享一个刚刚写的联动DropDownList控件 欢迎拍砖,该如何解决

2012-05-13 
分享一个刚刚写的联动DropDownList控件 欢迎拍砖前几天泡论坛的时候发现有很多人问关于联动DropDownList的

分享一个刚刚写的联动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不是挺好么?

为什么硬要服务器控件呢?

疑惑!!!

根据自己在开发时遇到的问题感觉只是状态保持方面比较方便!!!
[解决办法]
探讨

这~做后台的时候就可以偷懒了~
引用:

直接用js不是挺好么?

为什么硬要服务器控件呢?

疑惑!!!

根据自己在开发时遇到的问题感觉只是状态保持方面比较方便!!!

[解决办法]
不用这么麻烦吧?
代码太多了
ajax其实挺简单的。
[解决办法]
楼主好人,多谢分享
[解决办法]
超强啊!顶起
[解决办法]
顶, 多谢分享。

ajax还是比较简单的,楼主在尝试开源一个。哈哈
[解决办法]
鞋搂着分享!学习咯。。。
[解决办法]
楼主真强。
[解决办法]
哥们,很多年就不再用服务器控件了。
[解决办法]
感觉现在写服务器控件没啥意思了,以前还会因为系统自带的服务器不适用,然后重写之类的。现在感觉没有多大用处了。特别是做网站的,更没啥意思了
[解决办法]
这个还可以的,我个人觉得
[解决办法]
还用服务器控件
[解决办法]
还是习惯ajax的
[解决办法]
可以给手机web用。
[解决办法]
值得好好学下
[解决办法]
还是有点复杂,希望楼主改的再简单点...

现在只用mvc3+jquery
[解决办法]
不过能写那么多代码来分享,小弟还是佩服的,谢谢分享
[解决办法]
探讨

先回复,在看看

[解决办法]
没有积分 下载不了
[解决办法]
支持分享!!!
[解决办法]
分享快乐
[解决办法]
探讨

不用这么麻烦吧?
代码太多了
ajax其实挺简单的。

[解决办法]
感谢分享
[解决办法]
thank you for open code.
mark
------解决方案--------------------


收藏,备用
[解决办法]
支持一个,
[解决办法]
支持下!
[解决办法]
多谢分享
[解决办法]

探讨

支持分享!!!

[解决办法]
学习,收藏,备用。
[解决办法]
先回复,回头再仔细看下
[解决办法]
没必要这么复杂的
[解决办法]
虽然都是用js写联动 但是也顶一下 

这里涉及到用户控件 事件等
[解决办法]
分享不错。
[解决办法]
支持分享是必须的,LZ用心了
[解决办法]
LZ用心了 支持分享!!!

[解决办法]
分享不错。
[解决办法]
独乐乐不如众乐乐
[解决办法]
太麻烦了吧。。。。。不过定下
[解决办法]
为什么不用Jquery

热点排行