zoukankan      html  css  js  c++  java
  • DropDownTreeList

    asp.net本身就给我们提供了很多控件,而且不少控件开发公司也为我们提供了丰富漂亮的控件;但仍然不能满足我这样的懒人在实际项目中的需要,所以就需要学会自己来开发控件。因为我不想重复工作,所以要创建它,我自己是很喜欢控件开发,只不过目前还是一个小菜。
        前些时间在园子里看到有位朋友写也了一个DropDownTreeList控件,说实话写的很是不错。今天也贴出我在项目中写的DropDownTreeList控件,以此来和园子里喜欢控件开发的朋友共同进步。
        是不是有朋友在说:“少废话了,代码贴出来看看先”。好,那就贴出代码先:
      1/// <summary>
      2    /// 下拉树形框控件。
      3    /// </summary>

      4    [DefaultProperty("Text"), ToolboxData("<{0}:DropDownTreeList runat=server></{0}:DropDownTreeList>")]
      5    public class DropDownTreeList : WebControl, IPostBackDataHandler, IPostBackEventHandler
      6    {
      7
      8        /// <summary>
      9        /// 下拉列表框控件变量
     10        /// </summary>

     11        public System.Web.UI.WebControls.DropDownList TypeID = new System.Web.UI.WebControls.DropDownList();
     12
     13        
     14        /// <summary>
     15        /// 构造函数
     16        /// </summary>

     17        public DropDownTreeList(): base()
     18        {
     19            this.BorderStyle = BorderStyle.Groove;
     20            this.BorderWidth = 1;
     21        }

     22
     23        /// <summary>
     24        /// 构造函数
     25        /// </summary>
     26        /// <param name="dt"></param>

     27        public DropDownTreeList(DataTable dt): this()
     28        {
     29            BuildTree(dt);
     30        }

     31
     32        /// <summary>
     33        /// 构造函数
     34        /// </summary>
     35        /// <param name="selectid">选择项</param>
     36        /// <param name="dt"></param>

     37        public DropDownTreeList(string selectid,DataTable dt): this(dt)
     38        {
     39            this.TypeID.SelectedValue = selectid;
     40        }

     41
     42        /// <summary>
     43        /// 创建树
     44        /// </summary>
     45        /// <param name="dt"></param>

     46        public void BuildTree(DataTable dt)
     47        {
     48            if(this.ParentFiledName.Trim()=="")
     49            {
     50                throw new Exception("父字段名称不能为空");
     51            }

     52            if (this.NodeTextField.Trim() == "")
     53            {
     54                throw new Exception("节点文本字段名称不能为空");
     55            }

     56            if(this.NodeValueField.Trim()=="")
     57            {
     58                throw new Exception("节点值字段名称不能为空");
     59            }

     60            string SelectedType = "0";
     61
     62            TypeID.SelectedValue = SelectedType;
     63            this.Controls.Add(TypeID);
     64            TypeID.Items.Clear();
     65            //加载树
     66            TypeID.Items.Add(new ListItem("请选择     ""0"));
     67            DataRow[] drs = dt.Select(this.ParentFiledName + "=0");
     68            foreach (DataRow r in drs)
     69            {  
     70                TypeID.Items.Add(new ListItem(r[NodeTextField].ToString(), r[NodeValueField].ToString()));
     71                string blank=StyleDropTree.DropDownTreeList_Style(DropTreeStyle);
     72                BindNode(r[NodeValueField].ToString(), dt, blank);
     73            }

     74            
     75            TypeID.DataBind();
     76        }

     77
     78        private string _nodeValueField="";
     79        /// <summary>
     80        /// 节点值字段
     81        /// </summary>

     82        [Bindable(true), Browsable(true), Category("数据"), DefaultValue("")]
     83        public string NodeValueField
     84        {
     85            get
     86            {
     87                try
     88                {
     89                    return _nodeValueField;
     90                }

     91                catch
     92                {
     93                    throw new Exception();
     94                }

     95
     96            }

     97            set
     98            {
     99                this._nodeValueField = value;
    100            }

    101        }

    102
    103        private string _nodeTextField="";
    104        /// <summary>
    105        /// 节点文本字段
    106        /// </summary>

    107        [Bindable(true), Browsable(true), Category("数据"), DefaultValue("")]
    108        public string NodeTextField
    109        {
    110            get
    111            {
    112                try
    113                {
    114                    return _nodeTextField;
    115                }

    116                catch
    117                {
    118                    throw new Exception();
    119                }

    120
    121            }

    122            set
    123            {
    124                this._nodeTextField = value;
    125            }

    126        }

    127
    128        /// <summary>
    129        /// 创建树
    130        /// </summary>
    131        /// <param name="sqlstring">查询字符串</param>
    132        /// <param name="selectid">选取项</param>

    133        public void BuildTree(string selectid,DataTable dt)
    134        {
    135            BuildTree(dt);
    136            this.TypeID.SelectedValue = selectid;
    137        }

    138
    139        /// <summary>
    140        /// 创建树结点
    141        /// </summary>
    142        /// <param name="sonparentid">当前数据项</param>
    143        /// <param name="dt">数据表</param>
    144        /// <param name="blank">空白符</param>

    145        private void BindNode(string sonparentid, DataTable dt, string blank)
    146        {
    147            DataRow[] drs = dt.Select(this.ParentFiledName + "=" + sonparentid);
    148
    149            foreach (DataRow r in drs)
    150            {
    151                string nodevalue = r[NodeValueField].ToString();
    152                string text = r[NodeTextField].ToString();
    153                if (StyleDropTree.DropDownTreeList_Style(DropTreeStyle) == "├─『")
    154                {
    155                    text = blank + "" + text + "";
    156                }

    157                else
    158                {
    159                    text = blank + "" + text + "";
    160                }

    161                TypeID.Items.Add(new ListItem(text, nodevalue));
    162                string blankNode = HttpUtility.HtmlDecode("&nbsp;&nbsp;&nbsp;&nbsp;"+ blank;
    163                BindNode(nodevalue, dt, blankNode);
    164            }

    165        }

    166
    167        
    168        /// <summary>
    169        /// 当前选择项的值
    170        /// </summary>

    171        [Bindable(false), Browsable(false), Category("数据"), DefaultValue("")]
    172        public string SelectedValue
    173        {
    174            get
    175            {
    176                return this.TypeID.SelectedValue;
    177            }

    178
    179            set
    180            {
    181                this.TypeID.SelectedValue = value;
    182            }

    183        }

    184        
    185        /// <summary>
    186        /// 当前选择项的文本
    187        /// </summary>

    188        [Bindable(false), Browsable(false), Category("数据"), DefaultValue("")]
    189        public string SelectedText
    190        {
    191            get 
    192            {
    193                try
    194                {
    195                    string NodeText = this.TypeID.SelectedItem.Text.Trim();
    196                    int i = 0;
    197                    if (StyleDropTree.DropDownTreeList_Style(DropTreeStyle) == "├─『")
    198                    {
    199                        i = NodeText.IndexOf("");
    200                        return NodeText.Substring(i + 1, NodeText.Length - i - 2);
    201                    }

    202                    else
    203                    {
    204                        return NodeText.Trim();
    205                    }

    206                    
    207                }

    208                catch
    209                {
    210                    return "";
    211                }

    212                
    213            }

    214            set 
    215            
    216                this.TypeID.SelectedItem.Text=value;
    217            }

    218        }

    219        /// <summary>
    220        /// 父字段名称
    221        /// </summary>

    222        private string m_parentid = "";
    223        [Bindable(true), Category("数据"), DefaultValue("")]
    224        public string ParentFiledName
    225        {
    226            get
    227            {
    228                return m_parentid;
    229            }

    230
    231            set
    232            {
    233                m_parentid = value;
    234            }

    235        }

    236
    237        /// <summary>
    238        /// 当某选项被选中后,获取焦点的控件ID(如提交按钮等)
    239        /// </summary>

    240        [Bindable(true), Category("数据"), DefaultValue("")]
    241        public string SetFocusButtonID
    242        {
    243            get
    244            {
    245                object o = ViewState[this.ClientID + "_SetFocusButtonID"];
    246                return (o == null? "" : o.ToString();
    247            }

    248            set
    249            {
    250                ViewState[this.ClientID + "_SetFocusButtonID"= value;
    251                if (value != "")
    252                {
    253                    this.TypeID.Attributes.Add("onChange""document.getElementById('" + value + "').focus();");
    254                }

    255            }

    256        }

    257
    258        /// <summary>
    259        /// 获取或设置数据源
    260        /// </summary>

    261        private object _dataSource;
    262        [Bindable(true),Category("Data"),DefaultValue(null),Description("数据"),DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
    263        public virtual object DataSource
    264        {
    265            get
    266             {
    267                 return _dataSource;
    268             }

    269            set
    270            {
    271                 if ((value == null|| (value is IListSource) || (value is IEnumerable))
    272                {
    273                    _dataSource = value;
    274                }

    275                else
    276                {
    277                    throw new ArgumentException();
    278                 }

    279             }

    280         }

    281         
    282         public override void DataBind()
    283         {       
    284             base.OnDataBinding(EventArgs.Empty);
    285             DataTable table = (DataTable)this.DataSource;
    286             BuildTree(table);
    287         }

    288 
    289
    290        private StyleLook _styleLook;
    291        /// <summary>
    292        /// 设置控件的样式
    293        /// </summary>

    294        [Bindable(true), Category("样式"), DefaultValue("")]
    295        public StyleLook DropTreeStyle
    296        {
    297
    298            set { _styleLook = value; }
    299            get return _styleLook; }
    300        }

    301        /// <summary>
    302        /// 输出html,在浏览器中显示控件
    303        /// </summary>
    304        /// <param name="output"> 要写出到的 HTML 编写器 </param>

    305        protected override void Render(HtmlTextWriter output)
    306        {
    307            if (this.HintInfo != "")
    308            {
    309                output.WriteBeginTag("span id=\"" + this.ClientID + "\"  onmouseover=\"showhintinfo(this," + this.HintLeftOffSet + "," + this.HintTopOffSet + ",'" + this.HintTitle + "','" + this.HintInfo + "','" + this.HintHeight + "','" + this.HintShowType + "');\" onmouseout=\"hidehintinfo();\">");
    310            }

    311
    312            RenderChildren(output);
    313
    314            if (this.HintInfo != "")
    315            {
    316                output.WriteEndTag("span");
    317            }

    318        }

    319
    320
    321
    322        IPostBackDataHandler 成员
            “连个效果图没有,就让人看你那烂代码。来个图先?”,有朋友又在喊了。
                好的,图来了。效果1:
                好的,图来了。效果2:
               使用方法:
    string SQl = "select * from SYS_T_Menu";
                DataTable dt = SqlHelper.ReturnDataTable(SQl);
                DropDownTreeList1.NodeTextField = "Menu_Name";
                DropDownTreeList1.NodeValueField = "Menu_ID";
                DropDownTreeList1.ParentFiledName = "Menu_Father_ID";
                DropDownTreeList1.DataSource = dt;
                DropDownTreeList1.DataBind();
  • 相关阅读:
    转载CSDN(educast):c# 对两个Datatable的结构相同进行合并
    .net升级到4.0之后,出现'System.Windows, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e' or one of its depen
    转载来自博客园(poleices):C#和JavaScript交互(asp.net前台和后台互调)总结
    Bat文件 执行MSSQL 脚本
    多功能jQuery对话框插件 jBox 2.3 正式版
    十一种Web网站程序性能测试工具介绍
    大型电子商务网站架构
    Nginx负载均衡
    文语通5.0破解版下载 有详细图解安装说明
    分享8个超棒的免费高质量图标搜索引擎
  • 原文地址:https://www.cnblogs.com/bluedy1229/p/1104868.html
Copyright © 2011-2022 走看看