SmartDropDownList 绑定类型及类型下的内容

<asp:Panel ID="Panel1" runat="server"></asp:Panel>

if (!IsPostBack) { }
           
            IList<Accounts_Duty> adlist = new Accounts_DutyBLL().GetALLItems();
            SmartDropDownList sddl = new SmartDropDownList();
            sddl.AutoPostBack = true;
            sddl.ID = "sddlControl";
            sddl.Items.Add(new ListItem("请选择..", ""));
            //sddl.Attributes.Add("valid", "required");
            //sddl.Attributes.Add("errmsg", "请选择套系类型!");
            ListItem li = new ListItem();
            foreach (Accounts_Duty type in adlist)
            {
                li = new ListItem();
                li.Attributes.Add("optgroup", type.DutyName);
                List<Accounts_User> aulist = new Accounts_UserBLL().GetItemsByCondition(new List<string> { "DutyID," + type.ID + ",=" });
                if (aulist.Count > 0)
                {
                    sddl.Items.Add(li);
                    foreach (Accounts_User m in aulist)
                    {
                        li = new ListItem(m.TrueName, m.UserID.ToString());
                        sddl.Items.Add(li);
                    }
                }
            }
            sddl.SelectedIndexChanged += new EventHandler(this.sddlControl_SelectedIndexChanged);

            Panel1.Controls.Add(sddl);

 protected void sddlControl_SelectedIndexChanged(object sender, EventArgs e)
        {
            SmartDropDownList sddl = (SmartDropDownList)this.FindControl("sddlControl");
            //选中的值
            string value = sddl.SelectedValue;
          
        }

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI.WebControls;
using System.Collections;
using System.Web.UI;

namespace Demo.Web.General.Controls.Extension
{
    public class SmartDropDownList:DropDownList
    {
        //重写方法
        protected override void RenderContents(HtmlTextWriter writer)
        {
            string optgroup;
            ArrayList optOptionGroups = new ArrayList();
            foreach (ListItem item in this.Items)
            {
                if (item.Attributes["optgroup"] == null)
                {
                    RenderListItem(item, writer);
                }
                else
                {
                    optgroup = item.Attributes["optgroup"];
                    if (optOptionGroups.Contains(optgroup))
                    {
                        RenderListItem(item, writer);
                    }
                    else
                    {
                        if (optOptionGroups.Count > 0)
                        {
                            optgroupEndTag(writer);
                        }
                        optgroupBeginTag(optgroup, writer);
                        optOptionGroups.Add(optgroup);
                    }
                }
            }
            if (optOptionGroups.Count > 0)
            {
                optgroupEndTag(writer);
            }
        }

        //option 简单添加style
        private void RenderListItem(ListItem item, HtmlTextWriter writer)
        {
            writer.WriteBeginTag("option");
            writer.WriteAttribute("value", item.Value, true);
            if (item.Selected)
            {
                writer.WriteAttribute("selected", "selected", false);
            }
            foreach (string key in item.Attributes.Keys)
            {
                writer.WriteAttribute(key, item.Attributes[key]);
            }
            writer.Write(HtmlTextWriter.TagRightChar);
            HttpUtility.HtmlEncode(item.Text, writer);
            writer.WriteEndTag("option");
            writer.WriteLine();
        }

        //option 添加optgroup
        private void optgroupBeginTag(string name, HtmlTextWriter writer)
        {
            writer.WriteBeginTag("optgroup");
            writer.WriteAttribute("label", name);
            writer.Write(HtmlTextWriter.TagRightChar);
            writer.WriteLine();
        }

        private void optgroupEndTag(HtmlTextWriter writer)
        {
            writer.WriteEndTag("optgroup");
            writer.WriteLine();
        }

        //调用(根据DropDownList 无限级分级一文修改这个构造函数)
        //public NewDropDownList()
        //{
        //    ListItem li1 = new ListItem();
        //    li1.Attributes.Add("optgroup", "dsfasf");
        //    Items.Add(li1);
        //    ListItem li2 = new ListItem();
        //    Items.Add(li2);
        //    ListItem li3 = new ListItem();
        //    Items.Add(li3);
        //}
    }
}


 

posted @ 2011-07-04 10:12  荡来荡去(allen)  阅读(210)  评论(0编辑  收藏  举报