c# - How to create a DataColumn with default value

DataColumn DefaultValue Property
The .NET framework's DataColumn represents the schema of a column in a DataTable. DataColumn class exists in the System.Data namespace.

We can initialize a new DataColumn class by many constructors such as DataColumn(), DataColumn(String), DataColumn(String, Type), etc. DataColmun() constructor initializes a new DataColumn class instance as a type String.

The DataColumn DefaultValue property allows us to get or set the default value for the column when we are creating new rows. DefaultVlaue property value data type is a String which represents a value appropriate to the column's DataType.

DataColumn DefaultVlaue property throws an InvalidCastException exception when we are adding a row and the default value is not follow the column's data type.

When we create a new DataRow, a default value is automatically assigned to the column in which the DefaultVlaue property is set. If we set AutoIncrement value to true for a DataColumn, then we cannot set a default value for the column.

The following ADO.NET C# example code demonstrates to us how can we specify a default value for a DataColumn in an ASP.NET application.
DataColumnDefaultValue.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 dc = new DataColumn();
        dc.ColumnName = "BookID";
        dc.DataType = typeof(int);
        dt.Columns.Add(dc);

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

        DataColumn dc3 = new DataColumn();
        dc3.ColumnName = "BookAuthor";
        dc3.DataType = typeof(string);
        //this line make DataColumn default value 'author not found'
        dc3.DefaultValue = "author not found";
        dc3.AllowDBNull = false;
        dt.Columns.Add(dc3);

        dt.Rows.Add(new object[] { 1, "HTML5 Step by Step", "Faithe Wempen" });
        dt.Rows.Add(new object[] { 2, "asp.net example ebook", null });
        dt.Rows.Add(new object[] { 3, "Painting the Web", "Shelley Powers" });
        dt.Rows.Add(new object[] { 4, "coldfusion example ebook", null });

        GridView1.DataSource = dt;
        GridView1.DataBind();
    }
</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title>DataColumn DefaultValue - How to create data column with default value in ado.net</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <h2 style="color:DarkBlue; font-style:italic;">
            DataColumn DefaultValue - How to create
            <br /> data column with default value in ado.net
        </h2>
        <hr width="500" align="left" color="CornFlowerBlue" />
        <asp:GridView 
            ID="GridView1"
            runat="server"
            BorderColor="Snow"
            ForeColor="Snow"
            Width="550"
            >
            <HeaderStyle BackColor="Magenta" ForeColor="Snow" Height="30" />
            <RowStyle BackColor="SandyBrown" ForeColor="Maroon" />
            <AlternatingRowStyle BackColor="Wheat" ForeColor="Maroon" />
        </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>