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"
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) {
// 靜默吞噬異常,建議記錄日志
}
}
}
適用場景:下拉框綁定系統字典表(如省份、狀態碼、類別)。
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 { /* 靜默 */ }
}
}
靈活性:支持動態參數、自定義顯示/值字段、任意存儲過程。
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")與傳輸失敗,分別提示。
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、生成報表)復用。
| 模式 | 體現 | 優勢 |
|---|---|---|
| 外觀模式 | 封裝 BIRequest/SrvResponse 細節 | 調用者無需了解協議細節 |
| 模板方法 | 請求構建→發送→解析→綁定 固定流程 | 統一錯誤處理、日誌、性能監控切入點 |
| 依賴注入預備 | ServerUrl 靜態屬性可替換為配置注入 | 便於測試環境切換、多租戶支持 |