C#窗体应用程序的树形绑定
我们在处理项目业务时,有时候为了能让客户更客观地明白,理清一个流程,一个属性的关系时往往要借助树形结构。树形结构能让用户从根寻到页,从主流找到直流,方便了用户寻找流程和属性。下面是一个关于查询数据库数据绑定的一个树形实例简介。
1、 第一步我们想通过把数据库数据绑定到窗体中显示就需要在数据库中创建一张递归表,递归表就是字段间必须要有父子关系,然后在数据库写查询目录表的存储过程,如图所示:
ALTER PROCEDURE [dbo].[frmTreeView]
@SN char(300)='',@目录FID int =0
AS
BEGIN
if(@SN='SelectMuLuByID')--查询具有指定的父目录ID的目录集合
BEGIN
SELECT 目录ID, 目录MC
FROM 目录表
WHERE 目录FID=@目录FID
END
END
2、 第二步就是在程序后台代码数据层写连接数据库字符串连接数据库,再到逻辑层写访问数据库查询目录表的存储过程,如图所示
数据层连接字符串
逻辑层代码
public class BLL
{
DAL.DAL myDAL = new DAL.DAL();
public DataTable SelectYaoPingLeiBiie(int int目录FID)
{
SqlParameter[] mySqlParameters
= {
new SqlParameter("@SN",SqlDbType.Char),
new SqlParameter("@目录FID",SqlDbType.Int),
};
mySqlParameters[0].Value = "SelectMuLuByID";///
mySqlParameters[1].Value =int目录FID;
DataTable mydt
= myDAL.QueryDataTable("frmTreeView", mySqlParameters);
//DAL_SelectDB_Par(string mysqlstr, SqlParameter[] SQlCMDpas)
return mydt;
}
}
3、 窗体样式布局
4、 后台代码:
public partial class TreeView : Form
{
public TreeView()
{
InitializeComponent();
}
//实例化逻辑层
TreeViewDemo.BLL myBLL = new BLL();
//窗体加载完成事件
private void TreeView_Load(object sender, EventArgs e)
{
//树形控件第一层,目录FID为0的目录集合,树形控件的第一层集合
TreeNodeCollection TreeNodeCollectionList= TreeMuLu.Nodes;
LoadingTree(0,TreeMuLu.Nodes);
//TreeMuLu.Nodes.Add()
}
void LoadingTree(int CatalogPID, TreeNodeCollection myTreeNodeCollection)
{
//查询一开始就显示的第一级的项
DataTable myDataTable = myBLL.SelectYaoPingLeiBiie(CatalogPID);
if (myDataTable.Rows.Count > 0)//如果大于0,代表有子目录
{
//foreach循环遍历表格所有行
foreach (DataRow item in myDataTable.Rows)
{
int int目录ID = Convert.ToInt32(item["目录ID"].ToString().Trim());
//给树形节点集合绑定数据
TreeNode myTreeNode = myTreeNodeCollection.Add(item["目录ID"].ToString(), item["目录MC"].ToString());
if (myBLL.SelectYaoPingLeiBiie(int目录ID).Rows.Count > 0)//查询是否有子目录
{
//递归继续遍历下级
LoadingTree(Convert.ToInt32(int目录ID), myTreeNode.Nodes);
}
}
}
}
}