c# - How to get a DataTable columns data type

Get DataColumn’s DataType from 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 first use the NewRow() method to return a new DataRow object. 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 get the data type of columns from a DataTable. So we have to get the data type of each DataColumn object within a DataTable instance.

Here we used the DataTable class Columns property to get its columns collection as a DataColumnCollection object. Then we loop through the columns collection. In the looping time, we used DataColumnCollection’s Item[Int32] property to get the specified DataColumn instance.

After getting the DataColumn by index we can get its data type by using the DataColumn class DataType property. We also get the specified column’s name by using the DataColumn class ColumnName property.

The DataTable class Columns property gets the collection of columns that belong to this table. The Columns property value is a DataColumnCollection that contains the collection of DataColumn objects for the table. An empty collection is returned if no DataColumn objects exist.

The DataColumnCollection class represents a collection of DataColumn objects for a DataTable. The DataColumnCollection class Item[Int32] property gets the DataColumn from the collection at the specified index.

The DataColumn class DataType property gets or sets the type of data stored in the column. This property value is a Type object that represents the column data type.
DataColumnDataTypeFromDataTable.aspx

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

<!DOCTYPE html>
<script runat="server">
    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;

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

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

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

        dt.Rows.Add(new object[] { "1", "Scaling CouchDB", "Bradley Holt" });
        dt.Rows.Add(new object[] { "2", "Writing and Querying MapReduce Views in CouchDB", "Bradley Holt" });
        dt.Rows.Add(new object[] { "3", "Data Source Handbook", "Pete Warden" });
        dt.Rows.Add(new object[] { "4", "Scaling MongoDB", "Kristina Chodorow" });

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

        Label1.Text = "<b><u>Columns with DataType in DataTable....</u></b><br />";
        for (int i=0; i< dt.Columns.Count; i++)
        {
            Label1.Text += dt.Columns[i].ColumnName + " || ";
            Label1.Text += dt.Columns[i].DataType + "<br/ >";
        }
    }
</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title>How to get DataColumn DataType from DataTable in ado.net</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <h2 style="color:DarkBlue; font-style:italic;">
            How to get DataColumn DataType
            <br /> programmatically from DataTable in ado.net
        </h2>
        <hr width="500" align="left" color="CornFlowerBlue" />
        <asp:GridView 
            ID="GridView1"
            runat="server"
            BorderColor="Snow"
            ForeColor="Snow"
            Width="525"
            >
            <HeaderStyle BackColor="DarkOliveGreen" Height="35" />
            <RowStyle BackColor="BurlyWood" />
            <AlternatingRowStyle BackColor="SaddleBrown" />
        </asp:GridView>
        <br />
        <asp:Label
             ID="Label1"
             runat="server"
             Font-Size="Large"
             ForeColor="DeepSkyBlue"
             >
        </asp:Label>
        <br />
        <asp:Button 
            ID="Button1"
            runat="server"
            OnClick="Button1_Click"
            Text="Populate GridView"
            Height="45"
            Font-Bold="true"
            ForeColor="DarkBlue"
            />
    </div>
    </form>
</body>
</html>