Using a Disconnected DataTable to Display Records in GridView in ASP.NET


In this article we are going to take a look at a way to use a disconnected DataTable and will also display the records in GridView using this. In the later article, you will learn how to perform CRUD (Create Read Update Delete) operations using a disconnected DataTable. For the very first time a question will arise, what is a disconnected DataTable? Let's define it in few words.


I am assuming that the article learner is aware of the basics of ADO.NET and fundamental configuration, however I will try to use fundamental steps also so that a beginner learner can also get this.

What is a disconnected DataTable?

A disconnected DataTable can be used to communicate between distributed applications or web services, especially when someone wants to revert back all operations (Create Update Delete) made on data. A disconnected DataTable supports multiple DataTable bindings and it also makes it possible to navigate forward and backward in a DataTable, will talk about this is later articles.

Create Database

First, create the sample database for our demonstration. Here is the screenshot of my SQL Server Express database; you need to create it in your application.


In the above database table definition window I will be using the id column as the primary key and identity specification that will be increased by 1 each time automatically.

Create a ConectionString in Web.Config

In this demonstration we are going to store the connectionString setting in the web.config file. So, let's create the connectionString. Here is the one I am using.

add name="DatabaseConnectionString1" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database.mdf;Integrated Security=True;User Instance=True" providerName="System.Data.SqlClient"/>

In the  above connectionstring setting I have attached its name to "DatabaseConnectionString1".

Default.aspx Page Desing

The scope of this article is to display the data in a GridView using a disconnected DataTable, so we just need a GridView control here. Here is the one I am using.

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
        <asp:BoundField DataField="id" HeaderText="ID" />
        <asp:BoundField DataField="friends" HeaderText="Friends" />

In the  above code, I am setting AutoGenerateColumns to false and also added two BoundFields that will point to the id and friends fields from the DataTable.

Now let's move next on to view the main logic of this disconnected DataTable.

Default.aspx.cs Page Code

Here, we are going to talk about each method and event handler one by one.

protected void Page_Load(object sender, EventArgs e)
    if (!IsPostBack)

Firstly, I am checking it's postback and if it is false then calling a method named InitializeDataAndGridView(), which will perform the next task.

private void InitializeDataAndGridView()

In the above code, I am calling two more methods, one for populating the data and another for loading data into a container that is a GridView here for this demonstration.

Let's take a look at the PopulateData() method:

protected void PopulateData()
    SqlDataAdapter sqlDA = CreateAdapter();
    sqlDA.FillSchema(FriendseDataTable, SchemaType.Source);

protected SqlDataAdapter CreateAdapter()
    String connStr = ConfigurationManager.ConnectionStrings["DatabaseConnectionString1"].ConnectionString;
    SqlConnection conn = new SqlConnection(connStr);
    SqlCommand cmd = new SqlCommand("SELECT * FROM Table1", conn);
    cmd.CommandType = CommandType.Text;
    SqlDataAdapter sqlDA = new SqlDataAdapter(cmd);
    return sqlDA;

public DataTable FriendseDataTable
        if (Cache["friendsDataTable"] == null)
            Cache["friendsDataTable"] = new DataTable("friendsDataTable");
        return (DataTable)Cache["friendsDataTable"];

In the  above code, we are using a SqlDataAdapter instance to sqlDA and this code is playing main role in the disconnected model. Why, read on.

What is DataAdapter and all that stuff above?

A DataTable never has a live connection with a DataSource because the DataAdapter connects with the DataSource and executes the query and places the result in a DataTable. We don't need an open connection to use the DataAdapter.

The CreateAdapter method returns all resultant data back to the DataTable and here our DataTable instance is FriendsDataTable.

That's all for the short description on the PopulateData() method, now let's move to the  LoadGridView() method that will load our DataTable to GridView. Here is the code:

protected void LoadGridView()
    GridView1.DataSource = FriendseDataTable;

In the  above code, I am filling GridView1 with FriendDataTable, which has all records.

Please download the attached file and demonstrate it yourself. I hope you like this post. Please post your comments and feedbacks here. Love you. Thanks.