c# - How to copy a DataTable

Copy a DataTable
The DataTable class represents one table of in-memory data. The DataTable objects are conditionally case-sensitive. To create a DataTable programmatically the asp.net developers must first define its schema by adding DataColumn objects to the DataColumnCollection. To add rows to a DataTable, the developers must use the NewRow() method to return a new DataRow object at first. The DataTable also contains a collection of Constraint objects that can be used to ensure the integrity of the data.

The following asp.net c# tutorial code demonstrates how we can copy a DataTable. Here we used the DataTable class Copy() method to copy a DataTable instance.

The DataTable class Copy() method copies both the structure and data for this DataTable. The Copy() method returns a new DataTable. This method returns a new DataTable with the same structure and data as this DataTable.

The DataTable Copy() method creates a new DataTable with the same structure and data as the original DataTable. To copy the structure to a new DataTable without data the asp.net web developers have to use Clone() method.
ComboBoxChangeDataSource.aspx

<%@ Page Language="C#" AutoEventWireup="true" %>
<%@ Import Namespace="System.Data" %>

<!DOCTYPE html>
<script runat="server">
    protected void Button1_Click(object sender, System.EventArgs e)
    {
        DataTable dt = new DataTable();
        dt.TableName = "Books";

        DataColumn dc1 = new DataColumn();
        dc1.ColumnName = "BookID";
        dc1.DataType = typeof(int);
        dc1.AllowDBNull = false;
        dc1.Unique = true;

        DataColumn dc2 = new DataColumn();
        dc2.ColumnName = "BookName";
        dc2.DataType = typeof(string);

        DataColumn dc3 = new DataColumn();
        dc3.ColumnName = "Author";
        dc3.DataType = typeof(string);

        dt.Columns.AddRange(new DataColumn[] { dc1, dc2, dc3 });

        dt.Rows.Add(new object[] { 1, "WordPress 2.8 Theme Design", "Tessa Blakeley Silver" });
        dt.Rows.Add(new object[] { 2, "WordPress and Flash 10x Cookbook", "Peter Spannagle, Sarah Soward" });

        dt.AcceptChanges();

        GridView1.DataSource = dt;
        GridView1.DataBind();

        DataTable myCopyDataTable;
        //this line make a copy of 'Books' DataTable
        myCopyDataTable = dt.Copy();
        myCopyDataTable.TableName = "AllBooks";

        myCopyDataTable.Rows.Add(new object[] { 3, "WordPress 3 Search Engine Optimization", "Michael David" });
        //uncomment that line to get an error message because
        //Clone DataTable keeps original DataTable schemas and constraints
        //myCopyDataTable.Rows.Add(new object[] { 3, "WordPress 3 Search Engine Optimization", "Michael David" });

        myCopyDataTable.AcceptChanges();

        Label1.Text = "Copy of the DataTable. Using DataTable.Copy Method";
        Label1.Text += "<br />After copy we insert a new row<br />";

        GridView2.DataSource = myCopyDataTable;
        GridView2.DataBind();
    }
</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title>How to copy both structure and data from one DataTable to another DataTable in ado.net</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <h2 style="color:DarkBlue; font-style:italic;">
            How to copy both structure and data from
            <br /> one DataTable to another DataTable in ado.net
        </h2>
        <hr width="525" align="left" color="CornFlowerBlue" />
        <asp:GridView 
            ID="GridView1"
            runat="server"
            BorderColor="Snow"
            ForeColor="Snow"
            Width="525"
            >
            <HeaderStyle BackColor="DarkOrchid" />
            <RowStyle BackColor="OrangeRed" />
            <AlternatingRowStyle BackColor="DeepPink" />
        </asp:GridView>
        <br />
        <asp:Label
             ID="Label1"
             runat="server"
             Font-Size="Large"
             ForeColor="DodgerBlue"
             Font-Italic="true"
             >
        </asp:Label>
        <br />
        <asp:GridView 
            ID="GridView2"
            runat="server"
            BorderColor="Snow"
            ForeColor="Snow"
            Width="525"
            ShowHeaderWhenEmpty="true"
            >
            <HeaderStyle BackColor="DarkOrchid" />
            <RowStyle BackColor="OrangeRed" />
            <AlternatingRowStyle BackColor="DeepPink" />
        </asp:GridView>
        <br />
        <asp:Button 
            ID="Button1"
            runat="server"
            OnClick="Button1_Click"
            Text="Populate GridView"
            Height="45"
            Font-Bold="true"
            ForeColor="DodgerBlue"
            />
    </div>
    </form>
</body>
</html>