从数据库加载树形控件数据

在进行ASP.NET开发时,经常需要将数据库中的数据以树形结构展示给用户。然而,ASP.NET的TreeView控件并没有直接提供从数据库加载数据的功能。因此,需要编写一些通用的代码来实现这一需求。

为了将数据库表绑定到TreeView菜单,开发了一个名为"DBTreeLoad"的类,它需要数据库的列信息、表信息和层级信息。以下是运行代码的步骤。

初始化"DBTreeLoad"类实例

首先,需要创建一个"DBTreeLoad"类的实例。这个类将负责从数据库加载数据并构建TreeView的节点。

使用SetNodeInfo函数

"SetNodeInfo"函数是核心输入函数,它需要以下参数:

  • nodeDepth: 节点的深度,即节点在树形结构中所处的层级。
  • displayName: 节点在该层级的显示名称。
  • columnName: 数据库列的名称,从中获取值。
  • displayNode: 是否在层级结构中显示单独的节点。
  • parentColumn:数据库列的名称,从中获取父节点的值。

例如,如果有一个数据库表,其列如下:

  • CompanyName
  • CompanyRate
  • CompanyContracts
  • CompanyServices
  • CompanyEmail
  • ServiceCountries

需要构建如下的层级结构:

  • CompanyName
    • CompanyRate
    • CompanyContracts
    • CompanyServices
      • ServiceCountries

"SetNodeInfo"函数的参数将如下设置:

// 对于第0层 process.SetNodeInfo(0, "Company", "CompanyName", true, GetRootCol()); // 对于第1层 process.SetNodeInfo(1, "Rate", "CompanyRate", true, "CompanyName"); process.SetNodeInfo(1, "Contracts", "CompanyContracts", true, "CompanyName"); // 对于第2层 process.SetNodeInfo(2, "Services", "ServiceCountries", true, "CompanyServices");

设置好节点信息后,可以使用核心函数LoadFromDataTable来加载数据。

LoadFromDataTable函数

LoadFromDataTable函数负责将数据从数据库加载到TreeView控件中。以下是该函数的实现:

public void LoadFromDataTable(TreeView tv) { string selectstatement = "select '" + GetRootValue() + "' as " + GetRootName() + ", * from " + TableName; string whereclause = ""; string dataPath = ""; TreeNode parent = new TreeNode(); mtbl = new DataAccess().ExecuteSelectStatement(selectstatement, whereclause); parent.Text = mtbl.Rows[0][0].ToString(); tv.Nodes.Add(parent); for (int i = 0; i < mtbl.Rows.Count; i++) { for (int j = 0; j < Nodes.Count; j++) { dataPath = GetValuePath(i, j); dataPath = dataPath + "/" + mtbl.Rows[i][Nodes[j].ColumnName].ToString(); TreeNode n_item = tv.FindNode(dataPath.Remove(0, 1)); if (n_item == null) { string p_datapath = dataPath.Substring(0, dataPath.LastIndexOf("/")); TreeNode p_item = tv.FindNode(p_datapath.Remove(0, 1)); if (p_item == null) { p_item = new TreeNode(p_datapath.Substring(p_datapath.LastIndexOf("/") + 1)); p_datapath = p_datapath.Substring(0, p_datapath.LastIndexOf("/")); // parent valuepath (tv.FindNode(p_datapath.Remove(0, 1))).ChildNodes.Add(p_item); } if (!mtbl.Rows[i][Nodes[j].ColumnName].ToString().Equals("")) { n_item = new TreeNode(); n_item.Text = mtbl.Rows[i][Nodes[j].ColumnName].ToString(); p_item.ChildNodes.Add(n_item); } } } } }
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485