Python语言技术文档

微信小程序技术文档

php语言技术文档

jsp语言技术文档

asp语言技术文档

C#/.NET语言技术文档

html5/css技术文档

javascript

点击排行

您现在的位置:首页 > 技术文档 > C#/.NET入门教程

asp.net DropDownList自定义控件,让你的分类更清晰

来源:中文源码网    浏览:160 次    日期:2024-05-15 02:07:23
【下载文档:  asp.net DropDownList自定义控件,让你的分类更清晰.txt 】


asp.net DropDownList自定义控件,让你的分类更清晰
看到Discuz是2个下拉列表进行合并的,网上找了一些资料,然后写了这个小源码,在这里和大家分享一下! 运行效果图,如下所示(深黑的地方选不中,因为那是上一级的分类):
项目结构图如下所示:
Controls类库SmartDropDownList.cs代码如下所示:SmartDropDownList.cs 复制代码 代码如下: using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Web.UI.WebControls; 6 using System.Web.UI; 7 using System.ComponentModel; 8 using System.Web; 9 namespace mydream.Controls { [ToolboxData("<{0}:SmartDropDownList runat=server>")] public class SmartDropDownList : DropDownList { /// /// 构造函数 /// public SmartDropDownList() { } /// /// 将控件的内容呈现到指定的编写器中 /// /// protected override void RenderContents(HtmlTextWriter writer) { OptionGroupRenderContents(writer); } /// /// 呈现Option或OptionGroup /// /// writer private void OptionGroupRenderContents(HtmlTextWriter writer) { // 是否需要呈现OptionGroup的EndTag bool writerEndTag = false; foreach (ListItem li in this.Items) { // 如果没有optgroup属性则呈现Option if (li.Value != this.OptionGroupValue) { // 呈现Option RenderListItem(li, writer); } // 如果有optgroup属性则呈现OptionGroup else { if (writerEndTag) // 呈现OptionGroup的EndTag OptionGroupEndTag(writer); else writerEndTag = true; // 呈现OptionGroup的BeginTag OptionGroupBeginTag(li, writer); } } if (writerEndTag) // 呈现OptionGroup的EndTag OptionGroupEndTag(writer); } /// /// 呈现OptionGroup的BeginTag /// /// OptionGroup数据项 /// writer private void OptionGroupBeginTag(ListItem li, HtmlTextWriter writer) { writer.WriteBeginTag("optgroup"); // 写入OptionGroup的label writer.WriteAttribute("label", li.Text); foreach (string key in li.Attributes.Keys) { // 写入OptionGroup的其它属性 writer.WriteAttribute(key, li.Attributes[key]); } writer.Write(HtmlTextWriter.TagRightChar); writer.WriteLine(); } /// /// 呈现OptionGroup的EndTag /// /// writer private void OptionGroupEndTag(HtmlTextWriter writer) { writer.WriteEndTag("optgroup"); writer.WriteLine(); } /// /// 呈现Option /// /// Option数据项 /// writer private void RenderListItem(ListItem li, HtmlTextWriter writer) { writer.WriteBeginTag("option"); // 写入Option的Value writer.WriteAttribute("value", li.Value, true); if (li.Selected) { // 如果该Option被选中则写入selected writer.WriteAttribute("selected", "selected", false); } foreach (string key in li.Attributes.Keys) { // 写入Option的其它属性 writer.WriteAttribute(key, li.Attributes[key]); } writer.Write(HtmlTextWriter.TagRightChar); // 写入Option的Text HttpUtility.HtmlEncode(li.Text, writer); writer.WriteEndTag("option"); writer.WriteLine(); } /// /// 用于添加SmartDropDownList的分组项的ListItem的Value值 /// [ Browsable(true), Description("用于添加DropDownList的分组项的ListItem的Value值"), Category("扩展") ] public virtual string OptionGroupValue { get { string s = (string)ViewState["OptionGroupValue"]; return (s == null) ? "optgroup" : s; } set { ViewState["OptionGroupValue"] = value; } } } } smartDropDownList.aspx页面代码如下所示: smartDropDownList.aspx 复制代码 代码如下: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="smartDropDownList.aspx.cs" Inherits="smartDropDownList" %> <%@ Register Assembly="Controls" Namespace="mydream.Controls" TagPrefix="cc1" %>
smartDropDownList.aspx页面smartDropDownList.cs如下所示: smartDropDownList.cs 复制代码 代码如下: using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Data; public partial class smartDropDownList : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { this.Bindddlist(this.SmartDropDownList1); } } /// /// 板块ListItem /// /// private List GetBoardList() { List list = new List(); for (int i = 1; i < 6; i++) { ListItem li = new ListItem("这里是板块"+i,i.ToString()); list.Add(li); } return list; } /// /// 子板块ListItem /// /// private List GetSubBoardList() { List list=this.GetBoardList(); List list_sub = new List(); foreach (ListItem li in list) { ListItem li_sub = new ListItem("这一项是上一级的子板块", "这里是你像传递参数的值"); list_sub.Add(li_sub); } return list_sub; } /// /// 绑定下拉控件数据 /// private void Bindddlist(mydream.Controls.SmartDropDownList smartddlist) { smartddlist.Items.Clear(); List list = this.GetBoardList(); foreach (ListItem li in list) { ListItem item = new ListItem("--" + li.Text, "optgroup"); smartddlist.Items.Add(item); List list_sub = this.GetSubBoardList(); foreach (ListItem li_sub in list_sub) { smartddlist.Items.Add(li_sub); } } smartddlist.DataBind(); } } 你可以根据你数据库的设计来绑定值,这里没用数据库,只是说明思路! 源码下载,点击这里! 版权所有,转载请注明出处!

相关内容