近日不少朋友问我如何实现产品多级分类,故写了一个递归调用,用于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();
  }
 }
}

      在完成该代码后,我又有一种设想,如果将数据库分类信息生成的树以XML形式保存为文件,C#在建立分类时直接将TreeView控件绑定XML,这样仅在修改分类时费时生成XML文件,在产品其他未涉及分类修改的情况下是否能极大提高运行效率?该设想正在测试,如果您有兴许可以在评论中一块讨论。