Discuz代码学习,发现方便使用的下拉树控件,控件代码中指定的树状绑定值,有兴趣的朋友自己再改进一下,就更方使用.下拉树控件=控件ID..BuildTree("select tid ,name,pid from izhufan","pid","name")
昨天发现简单的改进的下拉树形框控件,和大家一起分享
控件代码:
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
Code
1
using System.Data;
2
using System.Web.UI;
3
using System.Web;
4
using System.Web.UI.WebControls;
5
using System.ComponentModel;
6![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
7
using Discuz.Common;
8
using Discuz.Data;
9![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
10
namespace Discuz.Control
11![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
12![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
13
/// 下拉树形框控件。
14
/// </summary>
15
[DefaultProperty("Text"),ToolboxData("<{0}:DropDownTreeList runat=server></{0}:DropDownTreeList>")]
16
public class DropDownTreeList : Discuz.Control.WebControl, IPostBackDataHandler, IPostBackEventHandler
17![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
18![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
19
/// 下拉列表框控件变量
20
/// </summary>
21
public System.Web.UI.WebControls.DropDownList TypeID=new System.Web.UI.WebControls.DropDownList();
22
23![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
24![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
25
/// 构造函数
26
/// </summary>
27
public DropDownTreeList(): base()
28![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
29
this.BorderStyle = BorderStyle.Groove;
30
this.BorderWidth=1;
31
}
32![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
33![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
34
/// 构造函数
35
/// </summary>
36
/// <param name="sqlstring">查询字符串</param>
37
public DropDownTreeList(string sqlstring): this()
38![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
39
BuildTree(sqlstring);
40
}
41![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
42![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
43
/// 构造函数
44
/// </summary>
45
/// <param name="sqlstring">查询字符串</param>
46
/// <param name="selectid">选取项</param>
47
public DropDownTreeList(string sqlstring,string selectid): this(sqlstring)
48![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
49
this.TypeID.SelectedValue=selectid;
50
}
51![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
52![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
53
/// 创建树
54
/// </summary>
55
public void BuildTree()
56![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
57
if((this.SqlText!=null)&&(this.SqlText!=""))
58![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
59
BuildTree(this.SqlText);
60
}
61
}
62![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
63![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
64
/// 创建树
65
/// </summary>
66
/// <param name="sqlstring">查询字符串</param>
67
public void BuildTree(string sqlstring)
68![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
69
70
string SelectedType="0";
71
72
TypeID.SelectedValue=SelectedType;
73![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
74
this.Controls.Add(TypeID);
75![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
76
DataTable dt = DbHelper.ExecuteDataset(CommandType.Text, sqlstring).Tables[0];
77![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
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 )
84![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
85
TypeID.Items.Add(new ListItem(r[1].ToString(),r[0].ToString()));
86
string blank = HttpUtility.HtmlDecode(" ");
87
BindNode( r[0].ToString() , dt,blank);
88
}
89
TypeID.DataBind();
90![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
91
}
92![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
93![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
94
/// 创建树
95
/// </summary>
96
/// <param name="sqlstring">查询字符串</param>
97
/// <param name="selectid">选取项</param>
98
public void BuildTree(string sqlstring,string selectid)
99![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
100
BuildTree(sqlstring);
101
this.TypeID.SelectedValue=selectid;
102
}
103![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
104![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.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)
111![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
112
DataRow [] drs = dt.Select(this.ParentID+"=" + sonparentid );
113
114
foreach( DataRow r in drs )
115![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.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(" " + blank);
121
BindNode(nodevalue,dt,blankNode);
122
}
123
}
124![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
125
126![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
127
/// 选取项
128
/// </summary>
129
[Bindable(true),Browsable(true),Category("Appearance"),DefaultValue("")]
130
public string SelectedValue
131![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
132
get
133![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
134
return this.TypeID.SelectedValue;
135
}
136![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
137
set
138![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
139
this.TypeID.SelectedValue = value;
140
}
141
}
142![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
143![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
144
/// 父字段名称
145
/// </summary>
146
private string m_parentid="parentid";
147
[Bindable(true),Category("Appearance"),DefaultValue("parentid")]
148
public string ParentID
149![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
150
get
151![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
152
return m_parentid;
153
}
154![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
155
set
156![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
157
m_parentid = value;
158
}
159
}
160![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
161![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
162![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
SQL字符串#region SQL字符串
163![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
164![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
165
/// SQL字符串变量
166
/// </summary>
167
private string sqltext;
168![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
169![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
170![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
171
/// SQL字符串属性
172
/// </summary>
173
[Bindable(true), Category("Appearance"), DefaultValue("")]
174
public string SqlText
175![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
176
get
177![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
178
return sqltext;
179
}
180![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
181
set
182![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
183
sqltext = value;
184
}
185
}
186![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
187
#endregion
188![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
189![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
190![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
191
/// 当某选项被选中后,获取焦点的控件ID(如提交按钮等)
192
/// </summary>
193
[Bindable(true),Category("Appearance"),DefaultValue("")]
194
public string SetFocusButtonID
195![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
196
get
197![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
198
object o = ViewState[this.ClientID+"_SetFocusButtonID"];
199
return (o==null)?"":o.ToString();
200
}
201
set
202![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
203
ViewState[this.ClientID+"_SetFocusButtonID"] = value;
204
if(value!="")
205![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
206
this.TypeID.Attributes.Add("onChange","document.getElementById('"+value+"').focus();");
207
}
208
}
209
}
210![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
211![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
212
/// 输出html,在浏览器中显示控件
213
/// </summary>
214
/// <param name="output"> 要写出到的 HTML 编写器 </param>
215
protected override void Render(HtmlTextWriter output)
216![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
217
if (this.HintInfo != "")
218![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
219
output.WriteBeginTag("span id=\"" + this.ClientID + "\" onmouseover=\"showhintinfo(this," + this.HintLeftOffSet + "," + this.HintTopOffSet + ",'" + this.HintTitle + "','" + this.HintInfo + "','" + this.HintHeight + "','" + this.HintShowType + "');\" onmouseout=\"hidehintinfo();\">");
220
}
221![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
222
RenderChildren(output);
223![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
224
if (this.HintInfo != "")
225![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
226
output.WriteEndTag("span");
227
}
228
}
229![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
230![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
231![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
232![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
IPostBackDataHandler 成员#region IPostBackDataHandler 成员
233![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
234
235![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
236
/// 引发PostBackChanged事件
237
/// </summary>
238
public void RaisePostDataChangedEvent()
239![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
240
}
241![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
242![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
243![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
244
/// 引发PostBack事件
245
/// </summary>
246
/// <param name="eventArgument"></param>
247
public void RaisePostBackEvent(string eventArgument)
248![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
249
}
250![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
251![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.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)
258![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
259![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
260
string presentValue = this.TypeID.SelectedValue;
261
string postedValue = postCollection[postDataKey];
262![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
263
//如果回发数据不等于原有数据
264
if (!presentValue.Equals(postedValue))
265![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
266
this.SqlText = postedValue;
267
return true;
268
}
269
return false;
270![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
271
}
272
#endregion
273![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
274
}
275
}
276![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
使用方法:
页面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
}