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

C# 圖形中級篇:DataTable 填充網格文檔模型(第六講·上)

     編輯:關於C語言

FillDataTable:從 ADO.NET 到文檔物件模型

public void FillDataTable(DataTable table) {
    if (table == null) throw new ArgumentNullException("table");
    myDocument.Clear();

    // 1. 標題列
    CellRow header = new CellRow(); myDocument.Add(header);
    foreach (DataColumn col in table.Columns)
        header.Add(col.ColumnName);

    // 2. 資料列
    foreach (DataRow drow in table.Rows) {
        CellRow row = new CellRow();
        foreach (DataColumn col in table.Columns) {
            object v = drow[col];
            string txt = (v == null || v == DBNull.Value) ? "[NULL]" : Convert.ToString(v);
            row.Add(txt);
        }
        myDocument.Add(row);
    }

    // 3. 排版與重繪
    using (Graphics g = CreateGraphics()) {
        RefreshSize(g);
        Invalidate();
    }
}

三層文檔物件模型

  • Cell:單一儲存格,含 Text、Left/Top/Width/Height、Selected。
  • CellRow:繼承 CollectionBase,管理單列單元格,提供 Add/索引器。
  • CellDocument:繼承 CollectionBase,管理多行,額外提供 Cells 屬性回傳扁平化單元格陣列。

極簡設計,**純資料容器,零繪圖邏輯**,完美體現「文檔-視圖分離」。

FillDataTable 流程圖解

  1. 清空現有文檔。
  2. 遍歷 DataTable.Columns 建立標題列。
  3. 遍歷 DataTable.Rows,每行建立 CellRow,轉換每欄值(DBNull→"[NULL]")加入。
  4. 取得 Graphics,呼叫 RefreshSize 排版,Invalidate 觸發重繪。

擴充性思考

若需支援資料型別、格式化、唯讀、驗證等,可在 Cell 增加 DataType、FormatString、ReadOnly 等屬性,**完全不影響繪製與互動層**——這就是 DOM 架構的威力。

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