近日不少朋友问我如何实现产品多级分类,故写了一个递归调用,用于TreeView的树型分类显示的类文件,该算法使用递归调用所以会牺牲程序运行效率,适用分类数非海量的数据库。以下代码为简化代码,未加错误处理语句,在实际使用中还应判断,分类和其下子类的parentID是否重复循环调用,以免程序进入死循环。
using System;
using System.Data;
using System.Data.OleDb;
using System.Windows.Forms;
namespace ZhihongFang
{
/// <summary>
/// 代码编写:方志洪
/// 编写时间:2005年8月23日
///
/// FenLei函数参数;
/// iparentID 分类号,类调用使用顶点号如 :0;
/// TV TreeView控件名;
/// TN 递归调用为TreeNode节点,类调用使用 null;
///
///
/// 数据库 product.mdb 定义
///
/// sortID 本级分类编号 自动编号
/// sortName 本级分类名 文本
/// parentID 上级分类编号 数值
///
/// </summary>
public class TreeViewFenLei
{
public void FenLei(int iparentID,TreeView TV,TreeNode TN)
{
TreeNode tmpTn;
tmpTn=TN;
OleDbConnection connection=new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+System.Environment.CurrentDirectory.ToString()+@"/product.mdb");
connection.Open();
OleDbCommand command=new OleDbCommand();
command=connection.CreateCommand();
command.CommandText="select * from T_Sort where parentID="+iparentID;
OleDbDataReader reader=command.ExecuteReader();
while(reader.Read())
{
if (TN==null)
{
TN=TV.Nodes.Add(reader["sortName"].ToString());
}
else
{
TN=TN.Nodes.Add(reader["sortName"].ToString());
}
FenLei((int)reader["sortID"],TV,TN);
TN=tmpTn;
}
reader.Close();
connection.Close();
}
}
}
using System;
using System.Data;
using System.Data.OleDb;
using System.Windows.Forms;
namespace ZhihongFang
{
/// <summary>
/// 代码编写:方志洪
/// 编写时间:2005年8月23日
///
/// FenLei函数参数;
/// iparentID 分类号,类调用使用顶点号如 :0;
/// TV TreeView控件名;
/// TN 递归调用为TreeNode节点,类调用使用 null;
///
///
/// 数据库 product.mdb 定义
///
/// sortID 本级分类编号 自动编号
/// sortName 本级分类名 文本
/// parentID 上级分类编号 数值
///
/// </summary>
public class TreeViewFenLei
{
public void FenLei(int iparentID,TreeView TV,TreeNode TN)
{
TreeNode tmpTn;
tmpTn=TN;
OleDbConnection connection=new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+System.Environment.CurrentDirectory.ToString()+@"/product.mdb");
connection.Open();
OleDbCommand command=new OleDbCommand();
command=connection.CreateCommand();
command.CommandText="select * from T_Sort where parentID="+iparentID;
OleDbDataReader reader=command.ExecuteReader();
while(reader.Read())
{
if (TN==null)
{
TN=TV.Nodes.Add(reader["sortName"].ToString());
}
else
{
TN=TN.Nodes.Add(reader["sortName"].ToString());
}
FenLei((int)reader["sortID"],TV,TN);
TN=tmpTn;
}
reader.Close();
connection.Close();
}
}
}
在完成该代码后,我又有一种设想,如果将数据库分类信息生成的树以XML形式保存为文件,C#在建立分类时直接将TreeView控件绑定XML,这样仅在修改分类时费时生成XML文件,在产品其他未涉及分类修改的情况下是否能极大提高运行效率?该设想正在测试,如果您有兴许可以在评论中一块讨论。