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