动态创建DataTable

前台设计页面:

<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>无标题页</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:GridView ID="GridView1" runat="server">
        </asp:GridView>
    </div>
    </form>
</body>
</html>

后台代码:

using System;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

public partial class _Default : System.Web.UI.Page 
{
    protected void Page_Load(object sender, EventArgs e)
    {
        MakeMasterTable();  //创建主表
        MakeDetailTable();  //创建子表
        MakeDataRelation(); //建立主子表关联
    }

    private DataSet ds;

    private void MakeMasterTable()
    {
        //创建数据表对象
        DataTable table = new DataTable("MasterTable");
        DataColumn column;
        DataRow row;
        //创建数据列对象
        column = new DataColumn();
        //设置数据列的数据类型
        column.DataType = System.Type.GetType("System.Int32");
        column.ColumnName = "DictTypeID";//指定数据列名
        column.ReadOnly = true;          //设置数据列为只读列
        column.Unique = true;            //设置数据列中的值不允许重复
        table.Columns.Add(column);

        column = new DataColumn();
        column.DataType = System.Type.GetType("System.String");
        column.ColumnName = "DictTypeName";
        column.AutoIncrement = false;    //设置数据列中的值不自动递增
        column.Caption = "DictTypeName"; //设置数据列标题
        column.ReadOnly = false;
        column.Unique = false;
        table.Columns.Add(column);
        //创建列数组
        DataColumn[] PrimaryKeyColumns = new DataColumn[1];
        //将DictTypeID赋给列数组
        PrimaryKeyColumns[0] = table.Columns["DictTypeID"];
        table.PrimaryKey = PrimaryKeyColumns;//设置DictTypeID字段为主键

        ds = new DataSet();//创建数据集对象
        ds.Tables.Add(table);//将上面创建的数据表对象添加表数据集中
        //为数据表添加数据
        for (int i = 0; i< 2; i++)
        {
            row = table.NewRow();
            row["DictTypeID"] = i;
            row["DictTypeName"] = "DictTypeName " + i;
            table.Rows.Add(row);
        }
        GridView1.DataSource = ds;
        GridView1.DataBind();
    }

    private void MakeDetailTable()
    {
        DataTable table = new DataTable("DetailTable");
        DataColumn column;
        DataRow row;

        column = new DataColumn();
        column.DataType= System.Type.GetType("System.Int32");
        column.ColumnName = "DictItemID";
        column.AutoIncrement = true;//设置该数据列是自增列
        column.Caption = "DictItemID";
        column.ReadOnly = true;
        column.Unique = true;

        table.Columns.Add(column);

        column = new DataColumn();
        column.DataType= System.Type.GetType("System.String");
        column.ColumnName = "DictItemName";
        column.AutoIncrement = false;
        column.Caption = "DictItemName";
        column.ReadOnly = false;
        column.Unique = false;
        table.Columns.Add(column);

        column = new DataColumn();
        column.DataType= System.Type.GetType("System.Int32");
        column.ColumnName = "DictTypeID";
        column.AutoIncrement = false;
        column.Caption = "DictTypeID";
        column.ReadOnly = false;
        column.Unique = false;
        table.Columns.Add(column);

        ds.Tables.Add(table);

        for(int i = 0; i <= 4; i ++)
        {
            row = table.NewRow();
            //row["DictItemID"] = i;//因为该列是自增列所以不用赋值
            row["DictItemName"] = "DictItemName " + i;
            row["DictTypeID"] = 0;
            table.Rows.Add(row);
        }
        for(int i = 0; i <= 4; i ++)
        {
            row = table.NewRow();
            //row["DictItemID"] = i + 5;
            row["DictItemName"] = "DictItemName " + (i+5);
            row["DictTypeID"] = 1;
            table.Rows.Add(row);
        }
    }

    private void MakeDataRelation()
    {
        DataColumn masterColumn =
            ds.Tables["MasterTable"].Columns["DictTypeID"];
        DataColumn detailColumn =
            ds.Tables["DetailTable"].Columns["DictTypeID"];
        //使用DataRelation对象建立主子表的关联关系
        DataRelation relation = new 
            DataRelation("MasterDetail", masterColumn, detailColumn);
        ds.Tables["DetailTable"].ParentRelations.Add(relation);
    }

}
原文地址:https://www.cnblogs.com/652769324qq/p/2968828.html