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

JCFXBL 輔助類:C# WinForms 數據綁定與數據庫交互封裝庫

     編輯:關於C

項目定位

JCFXBL.API.Helper 是專為 C# .NET Windows Forms 應用設計的輔助類庫,核心目標:**簡化 ComboBox、DataGridView、DataTable 與後端數據庫/服務的數據綁定交互**。封裝了 HTTP 請求、響應解析、異常處理、UI 綁定等樣板代碼。

依賴組件

  • JCFXBL.SrvInterface:服務接口層
  • JCFXBL.SrvInterface.Core.ProtocolLayer:協議層(BIRequest、SrvResponse、PostParm)
  • System.Windows.Forms、System.Data

核心配置


public static string ServerUrl; // 必須在應用啟動時設置,如 "https://server/Execute.ashx"

四大核心方法詳解

1. FillComboxByDic — 字典數據綁定 ComboBox


public static void FillComboxByDic(string dic, ComboBox cmb) {
    var req = new BIRequest {
        url = $"{ServerUrl}Execute.ashx?Serlet=GetDICStore&ACT=GET&dic={dic}"
    };
    if (req.Request()) {
        try {
            var resp = new SrvResponse(req.Response());
            var dt = resp.GetResultTable();
            cmb.DataSource = dt;
            cmb.DisplayMember = "value"; // 顯示字段
            cmb.ValueMember = "key";     // 實際值字段
        } catch (Exception ex) {
            // 靜默吞噬異常,建議記錄日志
        }
    }
}

適用場景:下拉框綁定系統字典表(如省份、狀態碼、類別)。

2. FillComboBoxByTable — 存儲過程查詢綁定 ComboBox


public static void FillComboBoxByTable(ComboBox cmb, ArrayList parms, 
    string act, string displayMember, string valueMember) {
    var req = new BIRequest {
        url = $"{ServerUrl}Execute.ashx?Serlet=GetDBStore&ACT={act}"
    };
    // 添加存儲過程參數
    if (parms != null) {
        foreach (PostParm p in parms) {
            req.AddFormParam(p.ParmName, p.ParmValue);
        }
    }
    if (req.Request()) {
        try {
            var resp = new SrvResponse(req.Response());
            var dt = resp.GetResultTable();
            cmb.DataSource = dt;
            cmb.DisplayMember = displayMember;
            cmb.ValueMember = valueMember;
        } catch { /* 靜默 */ }
    }
}

靈活性:支持動態參數、自定義顯示/值字段、任意存儲過程。

3. FillDataGridViewByTable — 數據網格綁定


public static void FillDataGridViewByTable(DataGridView dgv, string act, ArrayList parms) {
    var req = new BIRequest {
        url = $"{ServerUrl}Execute.ashx?Serlet=GetDBStore&ACT={act}"
    };
    if (parms != null) {
        foreach (PostParm p in parms) req.AddFormParam(p.ParmName, p.ParmValue);
    }
    if (req.Request()) {
        var resp = new SrvResponse(req.Response());
        if (resp.return_value == "1") { // 業務層成功標誌
            dgv.DataSource = resp.GetResultTable();
        } else {
            MessageBox.Show(req.Response()); // 顯示服務端錯誤信息
        }
    } else {
        MessageBox.Show(req.Response()); // 網絡/協議錯誤
    }
}

異常處理:區分業務失敗(return_value != "1")與傳輸失敗,分別提示。

4. FillDataTable — 純數據獲取(解耦 UI)


public static DataTable FillDataTable(string act, ArrayList parms) {
    var req = new BIRequest {
        url = $"{ServerUrl}Execute.ashx?Serlet=GetDBStore&ACT={act}"
    };
    if (parms != null) {
        foreach (PostParm p in parms) req.AddFormParam(p.ParmName, p.ParmValue);
    }
    if (req.Request()) {
        var resp = new SrvResponse(req.Response());
        if (resp.return_value == "1") {
            return resp.GetResultTable(); // 返回 DataTable,調用者自行綁定
        } else {
            MessageBox.Show(req.Response());
        }
    } else {
        MessageBox.Show(req.Response());
    }
    return null;
}

設計優勢:不直接操作 UI 控件,便於單元測試、非 UI 場景(如導出 Excel、生成報表)復用。

架構模式分析

改進建議(現代化重構方向)

  1. 異步化:改為 async Task 避免 UI 凍結,配合 HttpClient 替代 BIRequest。
  2. 泛型支持:Fill<T>(act, parms) 直接反序列化為實體列表 List<T>。
  3. 異常策略:拋出自定義異常 DataBindException 替代靜默吞噬/彈窗,由上層統一處理。
  4. 參數類型安全:ArrayList → List<PostParm> 或 Dictionary<string,object>。
  5. 配置管理:ServerUrl 從 appsettings.json 讀取,支持多環境。
  6. 單元測試:抽象 IDataService 接口,Mock 實現測試邏輯層。

使用示例


// 程序啟動時初始化
Helper.ServerUrl = "https://192.168.1.100/";

// 窗體加載時綁定
private void Form_Load(object sender, EventArgs e) {
    Helper.FillComboxByDic("PROVINCE", cmbProvince);
    
    var parms = new ArrayList();
    parms.Add(new PostParm("DEPT_ID", "1001"));
    Helper.FillComboBoxByTable(cmbEmployee, parms, "GET_EMPLOYEES", "EMP_NAME", "EMP_ID");
    
    Helper.FillDataGridViewByTable(dgvOrders, "GET_ORDERS", null);
    
    // 非 UI 使用
    var dt = Helper.FillDataTable("GET_REPORT_DATA", parms);
    ExportToExcel(dt);
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
模式體現優勢
外觀模式封裝 BIRequest/SrvResponse 細節調用者無需了解協議細節
模板方法請求構建→發送→解析→綁定 固定流程統一錯誤處理、日誌、性能監控切入點
依賴注入預備ServerUrl 靜態屬性可替換為配置注入便於測試環境切換、多租戶支持