首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 無限層級分類實作完整代碼分享

     編輯:關於C語言

前言

在內容管理、電商分類等系統中,「無限層級分類」是常見需求。本文分享一套基於 C# 的完整實作,支援 Access 與 SQL Server 雙資料庫,涵蓋分類的新增、移動、排序、刪除、樹狀顯示等核心功能,並提供統一介面,部署與使用極為簡單。

一、資料庫表結構設計

核心資料表需包含以下欄位(具體名稱可依專案調整):

  • ClassID (主鍵):分類唯一識別碼
  • ClassName:分類名稱
  • ParentID:父分類 ID,頂層為 0 或 NULL
  • OrderID:同層排序序號
  • Depth:層級深度(選用,便於縮進顯示)

資料表結構示意圖

欄位說明示意圖

二、核心類別架構

專案核心由三個類別檔案組成:

  • idb.cs:資料庫操作介面,定義統一契約
  • db.cs:實作 idb 介面,支援 Access/SQL Server 切換
  • action.cs:業務邏輯封裝,提供分類管理的高層 API

2.1 idb.cs - 資料庫操作介面

using System;
using System.Data;

namespace catalog {
    /// <summary>
    /// idb 介面定義
    /// </summary>
    public interface idb {
        IDbConnection getcon { get; }
        string constr { get; }
        IDbCommand command(string sql);
        int exesql(string sql);
        object getvalue(string sql);
        void close();
        DataTable getdata(string sql);
        IDataReader getdr(string sql);
    }
}

2.2 db.cs - 介面實作,支援雙資料庫

關鍵特點:

  • 透過 ConfigurationSettings.AppSettings["dbtype"] 讀取資料庫類型("SqlServer" 或 "Access")
  • 建構子自動初始化對應的 SqlConnection/OleDbConnection 及 SqlCommand/OleDbCommand
  • 實作介面所有方法,統一對外行為
// 節錄關鍵邏輯
public class db : idb {
    private IDbConnection con;
    private IDbCommand cm;
    private string dbtype = "Access";

    public db() {
        dbtype = ConfigurationSettings.AppSettings["dbtype"] ?? "";
        if (dbtype.ToLower() == "sqlserver") {
            con = new SqlConnection();
            cm = new SqlCommand();
        } else {
            con = new OleDbConnection();
            cm = new OleDbCommand();
        }
        string cnstring = ConfigurationSettings.AppSettings["cnstr"];
        con.ConnectionString = cnstring;
        open();
        cm.Connection = con;
    }
    // ... 實作 exesql, getvalue, getdata, getdr, close 等方法
}

2.3 action.cs - 業務邏輯核心方法

提供豐富的分類管理功能:

方法簽名功能說明
deleteAllCatalog(string table)清空分類表
downClass(string table, int classid)分類向下移動一位
upClass(string table, int classid)分類向上移動一位
moveClass(string table, int classid, int target)分類移動到指定目標
deleteTree(string table, int classid)刪除分類樹(含所有子分類)
list(string table)列出分類列表
getClassidOrderNum(string table, int classid)取得分類排序號
checkExist(string table, int classid)檢查分類是否存在
getChildren(string table, int classid)列出某分類所有子分類
modiClass(string table, int classid, string classname)修改分類名稱
classMap(string table, int classid)分類導航/麵包屑路徑
getClassName(string table, int classid)取得分類名稱
reset(string table)重置所有分類為頂層
deleteClass(string table, int classid)刪除單一分類
itemcreated(Object Sender, RepeaterItemEventArgs e, string ctlname, string ctlname2)Repeater 列表渲染事件
getOptions(string table, int type, int selected)生成下拉選單 Options
addClass(string table, string classname, int parentid)新增分類

三、部署與使用說明

  1. 建立資料庫表,執行對應 SQL 腳本
  2. 修改 Web.config 中 dbtype 與 cnstr 設定
  3. 引用 catalog 命名空間,實例化 action 類別即可調用上述方法
  4. 前端搭配 Repeater 或 TreeView 控制項展示分類樹

四、結語

本程式碼剛開發完成,難免有疏漏或 Bug,歡迎各位指正交流。希望這套無限分類實作能為您的專案節省寶貴開發時間。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved