Posted on 2007-08-11 00:08
(NineTyNine) 阅读(266)
评论(0) 编辑 收藏 网摘 所属分类:
.Net控件相关 、
C#相关
在这次改进中,减少了对数据库的操作。每个treeview 的绑定只对数据库进行了三次操作。即对三个表的读取。以加快浏览速度。
写了一个类,
SqlOperate.cs
1
using System;
2
using System.Data;
3
using System.Data.SqlClient;
4
using System.Configuration;
5
6
7
namespace ForProjectTest
8

{
9
/**//// <summary>
10
/// SqlOperate 的摘要说明。
11
/// </summary>
12
public class SqlOperate
13
{
14
public SqlOperate()
15
{
16
//
17
// TODO: 在此处添加构造函数逻辑
18
//
19
}
20
21
22
23
protected static string SqlConnection=ConfigurationSettings.AppSettings["con"];
24
25
/**//// <summary>
26
///
27
/// </summary>
28
/// <param name="SqlString"></param>
29
/// <returns></returns>
30
public static DataSet ds(string SqlString)
31
{
32
SqlConnection con = new SqlConnection(SqlConnection);
33
SqlDataAdapter sda = new SqlDataAdapter();
34
sda.SelectCommand = new SqlCommand(SqlString,con);
35
DataSet ds = new DataSet();
36
sda.Fill(ds);
37
con.Close();
38
con.Dispose();
39
sda.Dispose();
40
return ds;
41
}
42
43
44
/**//// <summary>
45
/// 旧表里符合条件的行组合成新表(旧表只限于三列)
46
/// </summary>
47
/// <param name="OldDT">旧表</param>
48
/// <param name="liehao">列的索引</param>
49
/// <param name="tiaojian">字段值</param>
50
/// <returns></returns>
51
public static DataTable RNewDT(DataTable OldDT,int liehao,string tiaojian)
52
{
53
DataTable NewDT=new DataTable();
54
NewDT.Columns.Add("class_dep_code");
55
NewDT.Columns.Add("class_name");
56
NewDT.Columns.Add("class_code");
57
int RowCount = OldDT.Rows.Count;
58
for(int i=0;i<RowCount;i++)
59
{
60
string cellText = OldDT.Rows[i][liehao].ToString();
61
if(cellText==tiaojian)
62
{
63
DataRow NewRow =NewDT.NewRow();
64
NewRow["class_dep_code"]=OldDT.Rows[i][0].ToString();
65
string aa = OldDT.Rows[i][0].ToString();
66
67
NewRow["class_name"]=OldDT.Rows[i][1].ToString();
68
string bb = OldDT.Rows[i][1].ToString();
69
70
NewRow["class_code"]=OldDT.Rows[i][2].ToString();
71
string cc = OldDT.Rows[i][2].ToString();
72
73
NewDT.Rows.Add(NewRow);
74
75
}
76
}
77
return NewDT;
78
}
79
80
/**//// <summary>
81
/// 判断是否包含二级节点
82
/// </summary>
83
/// <param name="dt">表</param>
84
/// <param name="tiaojian">字段值</param>
85
/// <returns></returns>
86
public static bool IsNotConclude(DataTable dt,string tiaojian)
87
{
88
int RowCount = dt.Rows.Count;
89
string all=null;
90
91
for(int i=0;i<RowCount;i++)
92
{
93
string cellText = dt.Rows[i][0].ToString();
94
if(tiaojian==cellText)
95
{
96
all=all+cellText;
97
}
98
}
99
if(all==null)
100
{
101
return false;
102
}
103
else
104
{
105
return true;
106
}
107
}
108
109
/**//// <summary>
110
/// 查询单个数值
111
/// </summary>
112
/// <param name="SqlString">sql语句</param>
113
/// <returns></returns>
114
public static string FirstString(string SqlString)
115
{
116
SqlConnection con = new SqlConnection(SqlConnection);
117
con.Open();
118
SqlCommand cmd = new SqlCommand(SqlString,con);
119
string frist = Convert.ToString(cmd.ExecuteScalar());
120
con.Close();
121
con.Dispose();
122
return frist;
123
}
124
125
/**//// <summary>
126
/// 查询单个数值
127
/// </summary>
128
/// <param name="SqlString">sql语句</param>
129
/// <returns></returns>
130
public static int FirstInt(string SqlString)
131
{
132
SqlConnection con = new SqlConnection(SqlConnection);
133
con.Open();
134
SqlCommand cmd = new SqlCommand(SqlString,con);
135
Object fristObj = cmd.ExecuteScalar();
136
con.Close();
137
con.Dispose();
138
if(fristObj==DBNull.Value)
139
{
140
return 0;
141
}
142
else
143
{
144
return Convert.ToInt32(fristObj);
145
}
146
}
147
148
149
150
}
151
}
152
以下是页面代码:
TreeView3是第一种显示方法,TreeView1是第二种显示方法
1
using System;
2
using System.Collections;
3
using System.ComponentModel;
4
using System.Data;
5
using System.Drawing;
6
using System.Web;
7
using System.Web.SessionState;
8
using System.Web.UI;
9
using System.Web.UI.WebControls;
10
using System.Web.UI.HtmlControls;
11
using Microsoft.Web.UI.WebControls;
12
13
using System.Data.SqlClient;
14
15
namespace ForProjectTest
16

{
17
/**//// <summary>
18
/// TreeviewBind 的摘要说明。
19
/// </summary>
20
public class TreeviewBind : System.Web.UI.Page
21
{
22
protected Microsoft.Web.UI.WebControls.TreeView TreeView1;
23
24
protected Microsoft.Web.UI.WebControls.TreeView TreeView3;
25
26
27
private void Page_Load(object sender, System.EventArgs e)
28
{
29
30
// 在此处放置用户代码以初始化页面
31
}
32
33
34
35
Web 窗体设计器生成的代码#region Web 窗体设计器生成的代码
36
override protected void OnInit(EventArgs e)
37
{
38
//
39
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
40
//
41
InitializeComponent();
42
base.OnInit(e);
43
}
44
45
/**//// <summary>
46
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
47
/// 此方法的内容。
48
/// </summary>
49
private void InitializeComponent()
50
{
51
this.TreeView3.PreRender += new System.EventHandler(this.TreeView3_PreRender);
52
this.TreeView1.PreRender += new System.EventHandler(this.TreeView1_PreRender);
53
this.Load += new System.EventHandler(this.Page_Load);
54
55
}
56
#endregion
57
58
59
private void TreeView3_PreRender(object sender, System.EventArgs e)
60
{
61
TreeNode tmpNd;//一级节点声明
62
TreeNode tmpNd2;//二级节点声明
63
TreeNode tmpNd3;//三级节点(包含于二级节点中)
64
TreeNode tmpNd4;//三级节点(不包含于二级节点)
65
66
67
string sqlSelect = "select dep_name,dep_code from db_dep";
68
DataView dv =SqlOperate.ds(sqlSelect).Tables[0].DefaultView;
69
string sqlSelect2 = "select unit_name,unit_code from db_unit";
70
DataView dv3 = SqlOperate.ds(sqlSelect2).Tables[0].DefaultView;
71
//把db_class表存入内存中
72
string sqlSelect3 = "select class_dep_code,class_name,class_code from db_class";
73
DataTable dt = SqlOperate.ds(sqlSelect3).Tables[0];
74
// 用于添加一级节点的foreach语句
75
foreach(DataRowView drv in dv)
76
{
77
//给每个一级节点赋值
78
79
tmpNd = new TreeNode();
80
tmpNd.ID=drv["dep_code"].ToString();
81
tmpNd.Text=drv["dep_name"].ToString();
82
//判断当前节点是否存在二级节点,如果存在则增加二级节点,并添加三级节点
83
if(SqlOperate.IsNotConclude(dt,tmpNd.ID.ToString()))
84
{
85
//添加二级节点的foreach语句
86
87
DataView dv2 = SqlOperate.RNewDT(dt,0,tmpNd.ID.ToString()).DefaultView;
88
foreach(DataRowView drv2 in dv2)
89
{
90
tmpNd2 = new TreeNode();
91
tmpNd2.ID=drv2["class_code"].ToString();
92
tmpNd2.Text=drv2["class_name"].ToString();
93
//添加三级节点的foreach语句
94
95
foreach(DataRowView drv3 in dv3)
96
{
97
tmpNd3 = new TreeNode();
98
tmpNd3.ID = drv3["unit_code"].ToString();
99
tmpNd3.Text = drv3["unit_name"].ToString();
100
tmpNd2.Nodes.Add(tmpNd3);
101
}
102
103
//添加二级节点
104
tmpNd.Nodes.Add(tmpNd2);
105
}
106
107
&n