In this article I will explain with an example, how to make use of custom Business Objects (Properties) to bind data to Databound controls like ASP.Net GridView using C# and VB.Net.
 
 
Database
Here I am making use of Microsoft’s Northwind Database. You can download it from here.
 
 
HTML Markup
The following HTML Markup consists of:
GridView – For displaying data.
The GridView consists of four BoundField columns.
Properties:
AllowPaging – For enabling paging in the GridView control.
Events:
The GridView has been assigned with the following event handlers i.e. OnPageIndexChanging.
<asp:GridView ID="gvCustomers" runat="server" AutoGenerateColumns="false" AllowPaging="true" OnPageIndexChanging="OnPaging">
    <Columns>
        <asp:BoundField DataField="CustomerId" HeaderText="Customer Id" />
        <asp:BoundField DataField="ContactName" HeaderText="Customer Name" />
        <asp:BoundField DataField="City" HeaderText="City" />
        <asp:BoundField DataField="Country" HeaderText="Country" />
    </Columns>
</asp:GridView>
 
 
Business Object Class
The Customer class has following properties.
C#
public class Customer
{
    public string CustomerId { get; set; }
    public string ContactName { get; set; }
    public string City { get; set; }
    public string Country { get; set; }
}
 
VB.Net
Public Class Customer
    Public Property CustomerId As String
    Public Property ContactName As String
    Public Property City As String
    Public Property Country As String
End Class
 
 
Namespaces
You will need to import the following namespaces.
C#
using System.Configuration;
using System.Data.SqlClient;
 
VB.Net
Imports System.Configuration
Imports System.Data.SqlClient
 
 
Binding Custom Business Objects (Properties) to GridView
Inside the Page_Load event handler, the BindGrid method is called.
BindGrid
Inside BindGrid method PopulateData method is called to provide the data to the DataSource property of the GridView.
Finally, the GridView is populated with the records fetched using PopulateData method.
C#
protected void Page_Load(object sender, EventArgs e)
{
    if (!this.IsPostBack)
    {
        BindGrid();
    }
}
private void BindGrid()
{
    gvCustomers.DataSource = this.PopulateData();
    gvCustomers.DataBind();
}
 
VB.Net
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
    If Not Me.IsPostBack Then
        BindGrid()
    End If
End Sub
Private Sub BindGrid()
    gvCustomers.DataSource = Me.PopulateData()
    gvCustomers.DataBind()
End Sub
 
PopulateData
Inside the PopulateData method, the generic List of the Customer class object is created.
The records are fetched using ExecuteReader method, and all the fetched values are set into the respective properties of Customer class properties.
Note: For more details on ExecuteReader, please refer my article Using SQLCommand ExecuteReader Example in ASP.Net with C# and VB.Net.
 
Finally, the generic List of Customer class object is returned.
C#
private List<Customer> PopulateData()
{
    List<Customer> customers = new List<Customer>();
    string query = "SELECT CustomerID, ContactName, City, Country FROM Customers";
    string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
    using (SqlConnection con = new SqlConnection(constr))
    {
        using (SqlCommand cmd = new SqlCommand(query, con))
        {
            con.Open();
            using (SqlDataReader sdr = cmd.ExecuteReader())
            {
                while (sdr.Read())
                {
                    customers.Add(new Customer
                    {
                        CustomerId = sdr["CustomerID"].ToString(),
                        ContactName = sdr["ContactName"].ToString(),
                        City = sdr["City"].ToString(),
                        Country = sdr["Country"].ToString()
                    });
                }
            }
            con.Close();
        }
    }
 
    return customers;
}
 
VB.Net
PrivateFunction PopulateData() As List(OfCustomer)
    Dim customers As List(Of Customer) = New List(Of Customer)()
    Dim query As String = "SELECT CustomerID, ContactName, City, Country FROM Customers"
    Dim constr As String = ConfigurationManager.ConnectionStrings("constr").ConnectionString
    Using con As SqlConnection = New SqlConnection(constr)
        Using cmd As SqlCommand = New SqlCommand(query, con)
            con.Open()
            Using sdr As SqlDataReader = cmd.ExecuteReader()
                While sdr.Read()
                    customers.Add(New Customer With {
                        .CustomerId = sdr("CustomerID").ToString(),
                        .ContactName = sdr("ContactName").ToString(),
                        .City = sdr("City").ToString(),
                        .Country = sdr("Country").ToString()
                    })
                End While
            End Using
            con.Close()
        End Using
    End Using
    Return customers
End Function
 
 
Paging in GridView
Inside the OnPageIndexChanging event handler, the PageIndex property of the GridView is updated with the new Page Number which was clicked.
Finally, the GridView is populated using the BindGrid method which in-turn displays the new GridView page.
C#
protected void OnPaging(object sender, GridViewPageEventArgs e)
{
    gvCustomers.PageIndex = e.NewPageIndex;
    this.BindGrid();
}
 
VB.Net
Protected Sub OnPaging(ByVal sender As Object, ByVal e As GridViewPageEventArgs)
    gvCustomers.PageIndex = e.NewPageIndex
    Me.BindGrid()
End Sub
 
 
Screenshot
Binding Custom Business Objects (Properties) to Databound Controls like GridView in ASP.Net
 
 
Demo
 
 
Downloads