您的位置:首页 > 其它

TreeView树形控件动态绑定

2009-07-02 12:52 519 查看
之前在做C# winform编程的时候用到了treeview树形控件,我需要从数据库中查询数据进行动态的绑定,但是我在网上找了相关的资料大多是利用递归函数。我认为这个很好,但是我看的是适宜于一张表的递归,但是我想要实现的是多张表(表与表之是一对多的关系),所以呢,就不能用递归了,花了很长时间在网上去问其他“大侠”和自己整理了下,现将代码贴出来共享,希望能帮到有用的人!备注:工程表(1:n)建筑物表(1:n)点表

TreeNode projectNode, buildingNode, pointNode;

OleDbConnection conn = new OleDbConnection(OLEDBHelper.str_connectionString1);  //定义数据库链接字符串
OleDbDataAdapter pro_da, bul_da, poi_da; //定义数据适配器(Project、Building、Point)
DataSet pro_ds, bul_ds, poi_ds;  //定义数据记录集(Project、Building、Point)
DataView pro_dv, bul_dv, poi_dv; //获取可能包括筛选视图或游标位置的表的自定义数据视图(Project、Building、Point)

private void frmTab_Load(object sender, EventArgs e)
{
this.treeView1.CheckBoxes = true; //窗体加载时所有节点都显示复选框

/*绑定工程名*/
pro_da = new OleDbDataAdapter("select ProjectID,ProjectName from Project", conn);  //实例化数据适配器
pro_ds = new DataSet(); //创建数据记录表的对象
pro_da.Fill(pro_ds);       //用数据适配器的对象去填充数据记录集
pro_dv = pro_ds.Tables[0].DefaultView;  //表示用于排序、筛选、搜索、编辑和导航的System.Data.DataTable+的可绑定数据的自定义视图
int count = pro_dv.Count; //获取数据视图的数量
int i = 0;            //定义初始变量i
while (i < count)
{
projectNode = new TreeNode(); //创建节点对象
projectNode.Text = pro_dv[i]["ProjectName"].ToString(); //显示节点的文本
projectNode.Tag = int.Parse(pro_dv[i]["ProjectID"].ToString()); //保存对应节点的值
treeView1.Nodes.Add(projectNode);  //将节点填充到树形控件上

/*绑定建筑物名*/
bul_da = new OleDbDataAdapter("select B1.BuildingName,B1.BuildingID from Building B1 inner join Project P1 on B1.ProjectID = P1.ProjectID where P1.ProjectID =" + pro_dv[i]["ProjectID"], conn); //根据数据库连接字符串和数据SQL语句来创建数据适配器
bul_ds = new DataSet(); //创建数据记录集
bul_da.Fill(bul_ds);      //数据适配器填充数据记录集
bul_dv = bul_ds.Tables[0].DefaultView; //获取数据表

int num = bul_dv.Count; //获取数据视图的数量
int j = 0;           //定义变量j;
while (j < num)
{
buildingNode = new TreeNode(); //创建节点
buildingNode.Text = bul_dv[j]["BuildingName"].ToString(); //显示节点的文本

buildingNode.Tag = int.Parse(bul_dv[j]["BuildingID"].ToString());//显示节点对应的值
projectNode.Nodes.Add(buildingNode); //将节点绑定到projectNode中

/*绑定点名*/
poi_da = new OleDbDataAdapter("SELECT * FROM MesauringPoint AS M1 INNER JOIN Building AS B1 ON B1.BuildingID=M1.BulidingID WHERE B1.BuildingID=" + bul_dv[j]["BuildingID"], conn); //根据数据库连接字符串和SQL查询语句创建数据适配器
poi_ds = new DataSet(); //创建数据记录表
poi_da.Fill(poi_ds);       //用数据适配器填充数据记录表
poi_dv = new DataView(); //创建数据视图
poi_dv = poi_ds.Tables[0].DefaultView; //获取数据表
int number = poi_dv.Count; //获取数据行数
int k = 0;
while (k < number)
{
pointNode = new TreeNode(); //创建节点
pointNode.Text = poi_dv[k]["PointName"].ToString(); //显示节点的文本
pointNode.Tag = int.Parse(poi_dv[k]["PointID"].ToString()); //显示节点对应的值
buildingNode.Nodes.Add(pointNode); //将该节点填充到buildingNode节点中
k++;
}

j++;
}

i++;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: