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

C# DataTable 完整操作指南:建立、查詢、篩選、排序、XML 轉換與資料繫結

     編輯:ASP.NET 基礎

DataTable 核心結構

  • Columns:DataColumnCollection,定義欄位名稱、型別、約束
  • Rows:DataRowCollection,實際資料列
  • Constraints:唯一性、外鍵等約束
  • DefaultView:DataView,提供篩選、排序、搜尋功能

常用建構子

var dt = new DataTable();                    // 無名稱
var dt = new DataTable("Table_AX");          // 指定名稱
var dt = new DataTable("Table_AX", "ns");    // 指定名稱與命名空間

實用操作速查表

1. 動態建立結構與資料

DataTable dt = new DataTable("Table_AX");

// 加欄位:方法 1
dt.Columns.Add("column0", typeof(string));
// 加欄位:方法 2
DataColumn dc = new DataColumn("column1", typeof(bool));
dt.Columns.Add(dc);

// 加資料列
DataRow dr = dt.NewRow();
dr["column0"] = "AX";
dr["column1"] = true;
dt.Rows.Add(dr);

// 直接加入未初始化的列 (欄位值為 DBNull)
dt.Rows.Add(dt.NewRow());

2. 查詢與篩選


// Select 回傳 DataRow[],支援類 SQL WHERE 條件
DataRow[] rows = dt.Select("column1 IS NULL");           // 找 NULL
DataRow[] rows2 = dt.Select("column0 = 'AX'");           // 字串比對
DataRow[] rows3 = dt.Select("column1 = true", "column0 DESC"); // 含排序

3. 複製與結構複製

DataTable dtWithData = dt.Copy();      // 含結構 + 資料
DataTable dtSchemaOnly = dt.Clone();   // 僅結構 (含約束)

4. 列操作四種寫法

DataRow r = dt.Rows[0];
// 1. 欄位名稱索引
r["column0"] = "AXzhz";
// 2. 序號索引
r[0] = "AXzhz";
// 3. 直接透過 Rows 集合
dt.Rows[0]["column0"] = "AXzhz";
// 4. 雙重索引
dt.Rows[0][0] = "AXzhz";

5. 跨 DataTable 複製列

dtSchemaOnly.Rows.Add(dt.Rows[0].ItemArray); // 以陣列形式複製值

6. 序列化為 XML 字串

public string DataTableToXml(DataTable dt)
{
    if (string.IsNullOrEmpty(dt.TableName)) dt.TableName = "Table_AX";
    using (var sw = new StringWriter())
    using (var xw = new XmlTextWriter(sw))
    {
        dt.WriteXml(xw);
        dt.WriteXmlSchema(xw); // 包含結構描述
        return sw.ToString();
    }
}

public DataTable XmlToDataTable(string xml)
{
    // XML 格式:先資料後結構描述 (兩段 )
    int idx = xml.IndexOf("

7. DataView 篩選、排序並轉回 DataTable

dt.DefaultView.RowFilter = "column1 <> true";   // 篩選
dt.DefaultView.Sort = "ID, Name ASC";           // 排序
DataTable sortedFiltered = dt.DefaultView.ToTable(); // 產生新 DataTable

8. 資料繫結 (GridView 等)

gvTestDataTable.DataSource = dt; // 實際繫結的是 DefaultView
gvTestDataTable.DataBind();

9. 判斷欄位是否存在

bool hasCol = dt.Columns.Contains("AX");

效能與記憶體提示

  • MinimumCapacity (預設 50) 可預設初始容量,大量資料時預先設定減少擴展開銷。
  • 頻繁增刪列時,考慮使用 BeginLoadData()/EndLoadData() 暫停索引維護。
  • 大資料集建議改用 SqlDataReader 串流處理,避免一次載入所有資料到記憶體。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved