DataWindow.NET 簡介
DataWindow.NET 是 Sybase (現 SAP) 為 .NET 平台提供的強大資料視窗元件,繼承 PowerBuilder DataWindow 核心引擎,提供豐富的資料呈現、編輯、報表列印功能,適合企業級應用快速開發。
安裝與環境建置
- 安裝 .NET Framework 1.1 / Visual Studio .NET 2003
- 安裝 DataWindow.NET 元件與設計環境
- 工具箱將出現 Sybase DataWindow 控制項頁籤
核心控制項
| 控制項 | 用途 |
DataWindow | 資料呈現、編輯、導覽、報表預覽 |
Transaction | 資料庫連線管理 (連線字串、認證、交易控制) |
資料視窗設計流程
- 使用 PowerBuilder IDE 或 DataWindow 設計師設計 .srd/.pbl 檔案
- 定義 SQL Select、呈現樣式、計算欄位、驗證規則
- 發布為
.pbd (動態庫) 或保留 .pbl (原始庫)
C# 程式碼整合範例
1. 初始化 Transaction 物件
using Sybase.DataWindow;
// 表單載入或建構函式中
private void InitializeTransaction()
{
trans.Dbms = Sybase.DataWindow.DbmsType.OleDb;
trans.UserId = "sa";
trans.Password = "your_password";
trans.AutoCommit = false; // 手動交易控制
trans.Lock = "RC"; // Read Committed 隔離層級
// OLE DB 連接字串
trans.DbParm = "PROVIDER='SQLOLEDB'," +
"DATASOURCE='MyServer'," +
"PROVIDERSTRING='database=MyDB;Integrated Security=SSPI'";
trans.Connect();
if (trans.SqlCode != 0)
throw new Exception($"資料庫連線失敗:{trans.Sqldbcode} - {trans.Sqlerrtext}");
}
2. 載入並顯示 DataWindow
private void LoadDataWindow()
{
// 指定庫檔與資料視窗物件名稱
dw.LibraryList = "reports.pbd"; // 或 "reports.pbl"
dw.DataWindowObject = "d_employee_list";
// 關聯 Transaction
dw.SetTransaction(trans);
// 擷取資料
dw.Retrieve();
if (dw.RowCount == 0)
MessageBox.Show("查無資料");
}
3. 資料操作:新增、刪除、儲存
// 新增一列
private void btnInsert_Click(object sender, EventArgs e)
{
int row = dw.InsertRow(0); // 0 = 附加至末尾
dw.SetRow(row);
dw.SetItemString(row, "emp_id", "E001");
dw.SetItemString(row, "emp_name", "張三");
dw.SetItemDateTime(row, "hire_date", DateTime.Now);
}
// 刪除當前列
private void btnDelete_Click(object sender, EventArgs e)
{
int currentRow = dw.GetRow();
if (currentRow > 0)
dw.DeleteRow(currentRow);
}
// 儲存變更至資料庫
private void btnSave_Click(object sender, EventArgs e)
{
// UpdateData: true=重新選取, true=重置狀態
if (dw.UpdateData(true, true) == 1)
{
trans.Commit(); // 交易提交才真正寫入資料庫
MessageBox.Show("儲存成功");
}
else
{
trans.Rollback();
MessageBox.Show($"儲存失敗:{dw.GetItemString(1, "db_error")}");
}
}
4. 關閉連線
protected override void OnFormClosing(FormClosingEventArgs e)
{
if (trans.Connected)
trans.Disconnect();
base.OnFormClosing(e);
}
DataWindow 進階功能
| 功能 | 方法/屬性 |
| 篩選 | dw.SetFilter("dept_id = 'IT'") + dw.Filter() |
| 排序 | dw.SetSort("salary DESC") + dw.Sort() |
| 匯出 | dw.SaveAs("report.pdf", FileSaveAsType.PDF) |
| 列印 | dw.Print() / dw.PrintProperties |
| 計算欄位 | 設計時定義,執行期自動計算 |
| 驗證規則 | 欄位層級 Validation、列層級 ItemError 事件 |
| 主從視窗 | dwMaster.SetDetail(dwDetail, "dept_id", "dept_id") |
常見問題與解決方案
- 部署:需將 DataWindow.NET 執行檔隨應用程式部署,或製作合併模組 (Merge Module)
- 授權:開發機需授權,執行檔部署需 Runtime 授權
- 效能:大量資料使用
dw.SetRedraw(false) 批次更新後 SetRedraw(true)
- 編碼:資料庫、連接字串、DataWindow 定義編碼需一致 (UTF-8/Big5)
本章小結
- DataWindow.NET 將 PowerBuilder 成熟資料視窗技術帶入 .NET
- 核心雙控制項:
DataWindow (UI/資料) + Transaction (連線/交易)
- 設計時與執行時分離:.pbl/.pbd 定義呈現邏輯,C# 控制流程
- 支援完整 CRUD、報表、匯出、列印、主從關聯等企業級功能
- 現代替代方案:
DevExpress、Telerik、FastReport、Stimulsoft 等 .NET 原生報表元件