Discuz下拉树形框控件

昨天发现简单的改进的下拉树形框控件,和大家一起分享

控件代码:

ContractedBlock.gif ExpandedBlockStart.gif Code
  1using System.Data;
  2using System.Web.UI;
  3using System.Web;
  4using System.Web.UI.WebControls;
  5using System.ComponentModel;
  6
  7using Discuz.Common;
  8using Discuz.Data;
  9
 10namespace Discuz.Control
 11ExpandedBlockStart.gifContractedBlock.gif{
 12ExpandedSubBlockStart.gifContractedSubBlock.gif    /**//// <summary>
 13    /// 下拉树形框控件。
 14    /// </summary>

 15    [DefaultProperty("Text"),ToolboxData("<{0}:DropDownTreeList runat=server></{0}:DropDownTreeList>")]
 16    public class DropDownTreeList : Discuz.Control.WebControl, IPostBackDataHandler, IPostBackEventHandler
 17ExpandedSubBlockStart.gifContractedSubBlock.gif    {
 18ExpandedSubBlockStart.gifContractedSubBlock.gif        /**//// <summary>
 19        /// 下拉列表框控件变量
 20        /// </summary>

 21        public System.Web.UI.WebControls.DropDownList TypeID=new System.Web.UI.WebControls.DropDownList();
 22    
 23
 24ExpandedSubBlockStart.gifContractedSubBlock.gif        /**//// <summary>
 25        /// 构造函数
 26        /// </summary>

 27        public DropDownTreeList(): base()
 28ExpandedSubBlockStart.gifContractedSubBlock.gif        {
 29            this.BorderStyle = BorderStyle.Groove; 
 30            this.BorderWidth=1
 31        }

 32
 33ExpandedSubBlockStart.gifContractedSubBlock.gif        /**//// <summary>
 34        /// 构造函数
 35        /// </summary>
 36        /// <param name="sqlstring">查询字符串</param>

 37        public DropDownTreeList(string sqlstring): this()
 38ExpandedSubBlockStart.gifContractedSubBlock.gif        {
 39             BuildTree(sqlstring);
 40        }

 41
 42ExpandedSubBlockStart.gifContractedSubBlock.gif        /**//// <summary>
 43        /// 构造函数
 44        /// </summary>
 45        /// <param name="sqlstring">查询字符串</param>
 46        /// <param name="selectid">选取项</param>

 47        public DropDownTreeList(string sqlstring,string selectid): this(sqlstring)
 48ExpandedSubBlockStart.gifContractedSubBlock.gif        {
 49            this.TypeID.SelectedValue=selectid;
 50        }

 51
 52ExpandedSubBlockStart.gifContractedSubBlock.gif        /**//// <summary>
 53        /// 创建树
 54        /// </summary>

 55        public void BuildTree()
 56ExpandedSubBlockStart.gifContractedSubBlock.gif        {
 57            if((this.SqlText!=null)&&(this.SqlText!=""))
 58ExpandedSubBlockStart.gifContractedSubBlock.gif            {
 59                BuildTree(this.SqlText);
 60            }

 61        }

 62
 63ExpandedSubBlockStart.gifContractedSubBlock.gif        /**//// <summary>
 64        /// 创建树
 65        /// </summary>
 66        /// <param name="sqlstring">查询字符串</param>

 67        public void BuildTree(string sqlstring)
 68ExpandedSubBlockStart.gifContractedSubBlock.gif        {
 69        
 70            string SelectedType="0";
 71            
 72            TypeID.SelectedValue=SelectedType;
 73
 74            this.Controls.Add(TypeID);
 75
 76            DataTable dt = DbHelper.ExecuteDataset(CommandType.Text, sqlstring).Tables[0];
 77
 78            TypeID.Items.Clear();
 79            //加载树
 80            TypeID.Items.Add(new ListItem("请选择     ","0"));
 81            DataRow [] drs = dt.Select(this.ParentID+"=0");    
 82        
 83            foreach( DataRow r in drs )
 84ExpandedSubBlockStart.gifContractedSubBlock.gif            {
 85                TypeID.Items.Add(new ListItem(r[1].ToString(),r[0].ToString()));
 86                string blank = HttpUtility.HtmlDecode("&nbsp;&nbsp;&nbsp;&nbsp;");
 87                BindNode( r[0].ToString() , dt,blank);
 88            }
    
 89            TypeID.DataBind();            
 90
 91        }

 92
 93ExpandedSubBlockStart.gifContractedSubBlock.gif        /**//// <summary>
 94        /// 创建树
 95        /// </summary>
 96        /// <param name="sqlstring">查询字符串</param>
 97        /// <param name="selectid">选取项</param>

 98        public void BuildTree(string sqlstring,string selectid)
 99ExpandedSubBlockStart.gifContractedSubBlock.gif        {
100            BuildTree(sqlstring);
101            this.TypeID.SelectedValue=selectid;
102        }

103
104ExpandedSubBlockStart.gifContractedSubBlock.gif        /**//// <summary>
105        /// 创建树结点
106        /// </summary>
107        /// <param name="sonparentid">当前数据项</param>
108        /// <param name="dt">数据表</param>
109        /// <param name="blank">空白符</param>

110        private void BindNode(string sonparentid ,DataTable dt,string blank)
111ExpandedSubBlockStart.gifContractedSubBlock.gif        {
112            DataRow [] drs = dt.Select(this.ParentID+"=" + sonparentid );
113            
114            foreach( DataRow r in drs )
115ExpandedSubBlockStart.gifContractedSubBlock.gif            {
116                string nodevalue = r[0].ToString();                
117                string text = r[1].ToString();                    
118                text = blank + text;
119                TypeID.Items.Add(new ListItem(text,nodevalue));
120                string blankNode = HttpUtility.HtmlDecode("&nbsp;&nbsp;&nbsp;&nbsp;" + blank);
121                BindNode(nodevalue,dt,blankNode);
122            }

123        }

124
125        
126ExpandedSubBlockStart.gifContractedSubBlock.gif        /**//// <summary>
127        /// 选取项
128        /// </summary>

129        [Bindable(true),Browsable(true),Category("Appearance"),DefaultValue("")]
130        public string SelectedValue
131ExpandedSubBlockStart.gifContractedSubBlock.gif        {
132            get
133ExpandedSubBlockStart.gifContractedSubBlock.gif            {
134                return this.TypeID.SelectedValue;
135            }

136
137            set
138ExpandedSubBlockStart.gifContractedSubBlock.gif            {
139                this.TypeID.SelectedValue = value;
140            }

141        }

142
143ExpandedSubBlockStart.gifContractedSubBlock.gif        /**//// <summary>
144        /// 父字段名称
145        /// </summary>

146        private string m_parentid="parentid";
147        [Bindable(true),Category("Appearance"),DefaultValue("parentid")]
148        public string ParentID
149ExpandedSubBlockStart.gifContractedSubBlock.gif        {
150            get
151ExpandedSubBlockStart.gifContractedSubBlock.gif            {
152                return m_parentid;
153            }

154
155            set
156ExpandedSubBlockStart.gifContractedSubBlock.gif            {
157                m_parentid = value;
158            }

159        }

160
161
162ContractedSubBlock.gifExpandedSubBlockStart.gif        SQL字符串#region SQL字符串
163
164ExpandedSubBlockStart.gifContractedSubBlock.gif        /**//// <summary>
165        /// SQL字符串变量
166        /// </summary>

167        private string sqltext;
168
169
170ExpandedSubBlockStart.gifContractedSubBlock.gif        /**//// <summary>
171        /// SQL字符串属性
172        /// </summary>

173        [Bindable(true), Category("Appearance"), DefaultValue("")]
174        public string SqlText
175ExpandedSubBlockStart.gifContractedSubBlock.gif        {
176            get
177ExpandedSubBlockStart.gifContractedSubBlock.gif            {
178                return sqltext;
179            }

180
181            set
182ExpandedSubBlockStart.gifContractedSubBlock.gif            {
183                sqltext = value;
184            }

185        }

186
187        #endregion

188
189
190ExpandedSubBlockStart.gifContractedSubBlock.gif        /**//// <summary>
191        /// 当某选项被选中后,获取焦点的控件ID(如提交按钮等)
192        /// </summary>

193        [Bindable(true),Category("Appearance"),DefaultValue("")] 
194        public string SetFocusButtonID
195ExpandedSubBlockStart.gifContractedSubBlock.gif        {
196            get
197ExpandedSubBlockStart.gifContractedSubBlock.gif            {
198                object o = ViewState[this.ClientID+"_SetFocusButtonID"];
199                return (o==null)?"":o.ToString(); 
200            }

201            set
202ExpandedSubBlockStart.gifContractedSubBlock.gif            {
203                ViewState[this.ClientID+"_SetFocusButtonID"= value;
204                if(value!="")
205ExpandedSubBlockStart.gifContractedSubBlock.gif                {
206                    this.TypeID.Attributes.Add("onChange","document.getElementById('"+value+"').focus();");
207                }

208            }

209        }

210
211ExpandedSubBlockStart.gifContractedSubBlock.gif        /**//// <summary>
212        /// 输出html,在浏览器中显示控件
213        /// </summary>
214        /// <param name="output"> 要写出到的 HTML 编写器 </param>

215        protected override void Render(HtmlTextWriter output)
216ExpandedSubBlockStart.gifContractedSubBlock.gif        {
217            if (this.HintInfo != "")
218ExpandedSubBlockStart.gifContractedSubBlock.gif            {
219                output.WriteBeginTag("span id=\"" + this.ClientID + "\"  οnmοuseοver=\"showhintinfo(this," + this.HintLeftOffSet + "," + this.HintTopOffSet + ",'" + this.HintTitle + "','" + this.HintInfo + "','" + this.HintHeight + "','" + this.HintShowType + "');\" οnmοuseοut=\"hidehintinfo();\">");
220            }

221
222            RenderChildren(output);
223
224            if (this.HintInfo != "")
225ExpandedSubBlockStart.gifContractedSubBlock.gif            {
226                output.WriteEndTag("span");
227            }

228        }

229
230
231
232ContractedSubBlock.gifExpandedSubBlockStart.gif        IPostBackDataHandler 成员#region IPostBackDataHandler 成员
233
234 
235ExpandedSubBlockStart.gifContractedSubBlock.gif        /**//// <summary>
236        /// 引发PostBackChanged事件
237        /// </summary>

238        public void RaisePostDataChangedEvent()
239ExpandedSubBlockStart.gifContractedSubBlock.gif        {
240        }

241
242
243ExpandedSubBlockStart.gifContractedSubBlock.gif        /**//// <summary>
244        /// 引发PostBack事件
245        /// </summary>
246        /// <param name="eventArgument"></param>

247        public void RaisePostBackEvent(string eventArgument)
248ExpandedSubBlockStart.gifContractedSubBlock.gif        {
249        }

250
251ExpandedSubBlockStart.gifContractedSubBlock.gif        /**//// <summary>
252        /// 加载提交数据
253        /// </summary>
254        /// <param name="postDataKey"></param>
255        /// <param name="postCollection"></param>
256        /// <returns></returns>

257        public bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection)
258ExpandedSubBlockStart.gifContractedSubBlock.gif        {
259
260            string presentValue = this.TypeID.SelectedValue;
261            string postedValue = postCollection[postDataKey];
262
263            //如果回发数据不等于原有数据
264            if (!presentValue.Equals(postedValue))
265ExpandedSubBlockStart.gifContractedSubBlock.gif            {
266                this.SqlText = postedValue;
267                return true;
268            }

269            return false;
270
271        }

272        #endregion

273
274    }

275}

276


使用方法:

页面aspx代码:

<%@ Register TagPrefix="cc2" Namespace="Discuz.Control" Assembly="Discuz.Control" %>

<div id="showtargetforum" runat="server">

 <cc2:DropDownTreeList id="targetforumid" runat="server" Visible="true"></cc2:DropDownTreeList>

</div>

*.apsx.cs代码:  

  public void InitInfo()

        {
            #region 初始化信息绑定
            targetforumid.BuildTree(DatabaseProvider.GetInstance().GetForumsTree());
//绑定SQL语句
 if (DNTRequest.GetString("fid") != "")
            {
                targetforumid.SelectedValue = DNTRequest.GetString("fid");
                //addtype.SelectedValue = "1";
                targetforumid.Visible = true;
            }
  #endregion

}

转载于:https://www.cnblogs.com/lgh/archive/2008/09/17/1292157.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值