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

C# 實現 DataGrid 行列轉換 (透視表效果):基於 DataSet 操作

     編輯:關於C#

本文展示如何在 ASP.NET WebForms 中實現數據的行列轉換 (透視/樞紐效果),將長表格式數據轉為寬表格式顯示。

目標效果

轉換前後對比

測試數據 (XML)

<?xml version="1.0" encoding="utf-8" ?>
<table>
  <tr>
    <編碼>A01</編碼>
    <內容>你</內容>
    <M0601>1</M0601>
    <M0602>2</M0602>
  </tr>
  <tr>
    <編碼>A02</編碼>
    <內容>我</內容>
    <M0601>3</M0601>
    <M0602>4</M0602>
  </tr>
</table>

核心轉換邏輯 (DataConvert 方法)

private DataSet DataConvert(DataSet ds, int startIndex, int endIndex) {
    DataSet dsNew = new DataSet();
    try {
        // 遍歷需轉為列的欄位索引範圍
        for (int i = startIndex; i <= endIndex; i++) {
            DataTable dtPart = ds.Tables[0].Copy(); // 複製源表

            // 移除非當前目標欄位
            for (int j = startIndex; j <= endIndex; j++) {
                if (i != j) {
                    dtPart.Columns.Remove(dtPart.Columns[j].ColumnName);
                }
            }

            // 添加「月份」欄位,固定值為原欄位名
            DataColumn dc = new DataColumn("月份", typeof(string));
            dc.Expression = "'" + dtPart.Columns[startIndex].ColumnName + "'";
            dtPart.Columns.Add(dc);

            // 重命名值欄位為「數量」
            dtPart.Columns[startIndex].ColumnName = "數量";

            // 合併到結果集
            if (dsNew.Tables.Count > 0) dsNew.Merge(dtPart);
            else dsNew.Tables.Add(dtPart);
        }
    } catch (Exception ex) {
        this.Label1.Text = ex.Message;
    }
    return dsNew;
}

前端頁面關鍵部分

<asp:DataGrid id="dgOld" runat="server" /> <!-- 原始數據 -->
<asp:Button id="btnChange" Text="轉換" OnClick="Button1_Click" runat="server" />
<asp:DataGrid id="dgNew" runat="server" /> <!-- 轉換後數據 -->

按鈕事件

private void Button1_Click(object sender, EventArgs e) {
    // 假設第 2、3 列 (索引 2,3) 為需透視的月份數據列
    this.dgNew.DataSource = DataConvert(ds, 2, 3).Tables[0].DefaultView;
    this.dgNew.DataBind();
}

流程圖解

實現流程圖

此法通過 DataTable.Copy、Columns.Remove、Expression 計算列、Merge 合併實現行列轉換,適合中小數據量場景。大數據量建議在 SQL 層面用 PIVOT 或 OLAP 方案。

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