Discuz下拉树形框控件
Discuz代码学习,发现方便使用的下拉树控件,控件代码中指定的树状绑定值,有兴趣的朋友自己再改进一下,就更方使用.下拉树控件=控件ID..BuildTree("select tid ,name,pid from izhufan","pid","name")
昨天发现简单的改进的下拉树形框控件,和大家一起分享
控件代码:
1
using System.Data;2
using System.Web.UI;3
using System.Web;4
using System.Web.UI.WebControls;5
using System.ComponentModel;6

7
using Discuz.Common;8
using Discuz.Data;9

10
namespace Discuz.Control11


{12

/**//// <summary>13
/// 下拉树形框控件。14
/// </summary>15
[DefaultProperty("Text"),ToolboxData("<{0}:DropDownTreeList runat=server></{0}:DropDownTreeList>")]16
public class DropDownTreeList : Discuz.Control.WebControl, IPostBackDataHandler, IPostBackEventHandler17

{18

/**//// <summary>19
/// 下拉列表框控件变量20
/// </summary>21
public System.Web.UI.WebControls.DropDownList TypeID=new System.Web.UI.WebControls.DropDownList();22
23

24

/**//// <summary>25
/// 构造函数26
/// </summary>27
public DropDownTreeList(): base()28

{29
this.BorderStyle = BorderStyle.Groove; 30
this.BorderWidth=1; 31
}32

33

/**//// <summary>34
/// 构造函数35
/// </summary>36
/// <param name="sqlstring">查询字符串</param>37
public DropDownTreeList(string sqlstring): this()38

{39
BuildTree(sqlstring);40
}41

42

/**//// <summary>43
/// 构造函数44
/// </summary>45
/// <param name="sqlstring">查询字符串</param>46
/// <param name="selectid">选取项</param>47
public DropDownTreeList(string sqlstring,string selectid): this(sqlstring)48

{49
this.TypeID.SelectedValue=selectid;50
}51

52

/**//// <summary>53
/// 创建树54
/// </summary>55
public void BuildTree()56

{57
if((this.SqlText!=null)&&(this.SqlText!=""))58

{59
BuildTree(this.SqlText);60
}61
}62

63

/**//// <summary>64
/// 创建树65
/// </summary>66
/// <param name="sqlstring">查询字符串</param>67
public void BuildTree(string sqlstring)68

{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 )84

{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

91
}92

93

/**//// <summary>94
/// 创建树95
/// </summary>96
/// <param name="sqlstring">查询字符串</param>97
/// <param name="selectid">选取项</param>98
public void BuildTree(string sqlstring,string selectid)99

{100
BuildTree(sqlstring);101
this.TypeID.SelectedValue=selectid;102
}103

104

/**//// <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

{112
DataRow [] drs = dt.Select(this.ParentID+"=" + sonparentid );113
114
foreach( DataRow r in drs )115

{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

125
126

/**//// <summary>127
/// 选取项128
/// </summary>129
[Bindable(true),Browsable(true),Category("Appearance"),DefaultValue("")]130
public string SelectedValue131

{132
get133

{134
return this.TypeID.SelectedValue;135
}136

137
set138

{139
this.TypeID.SelectedValue = value;140
}141
}142

143

/**//// <summary>144
/// 父字段名称145
/// </summary>146
private string m_parentid="parentid";147
[Bindable(true),Category("Appearance"),DefaultValue("parentid")]148
public string ParentID149

{150
get151

{152
return m_parentid;153
}154

155
set156

{157
m_parentid = value;158
}159
}160

161

162

SQL字符串#region SQL字符串163

164

/**//// <summary>165
/// SQL字符串变量166
/// </summary>167
private string sqltext;168

169

170

/**//// <summary>171
/// SQL字符串属性172
/// </summary>173
[Bindable(true), Category("Appearance"), DefaultValue("")]174
public string SqlText175

{176
get177

{178
return sqltext;179
}180

181
set182

{183
sqltext = value;184
}185
}186

187
#endregion188

189

190

/**//// <summary>191
/// 当某选项被选中后,获取焦点的控件ID(如提交按钮等)192
/// </summary>193
[Bindable(true),Category("Appearance"),DefaultValue("")] 194
public string SetFocusButtonID195

{196
get197

{198
object o = ViewState[this.ClientID+"_SetFocusButtonID"];199
return (o==null)?"":o.ToString(); 200
}201
set202

{203
ViewState[this.ClientID+"_SetFocusButtonID"] = value;204
if(value!="")205

{206
this.TypeID.Attributes.Add("onChange","document.getElementById('"+value+"').focus();");207
}208
}209
}210

211

/**//// <summary>212
/// 输出html,在浏览器中显示控件213
/// </summary>214
/// <param name="output"> 要写出到的 HTML 编写器 </param>215
protected override void Render(HtmlTextWriter output)216

{217
if (this.HintInfo != "")218

{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

222
RenderChildren(output);223

224
if (this.HintInfo != "")225

{226
output.WriteEndTag("span");227
}228
}229

230

231

232

IPostBackDataHandler 成员#region IPostBackDataHandler 成员233

234
235

/**//// <summary>236
/// 引发PostBackChanged事件237
/// </summary>238
public void RaisePostDataChangedEvent()239

{240
}241

242

243

/**//// <summary>244
/// 引发PostBack事件245
/// </summary>246
/// <param name="eventArgument"></param>247
public void RaisePostBackEvent(string eventArgument)248

{249
}250

251

/**//// <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

{259

260
string presentValue = this.TypeID.SelectedValue;261
string postedValue = postCollection[postDataKey];262

263
//如果回发数据不等于原有数据264
if (!presentValue.Equals(postedValue))265

{266
this.SqlText = postedValue;267
return true;268
}269
return false;270

271
}272
#endregion273

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
}
浙公网安备 33010602011771号