In this article I will explain with an example, how to pass or transfer a selected row of GridView control to another page along with its data and controls using Server.Transfer in ASP.Net with 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 three BoundField columns and one TemplateField column.
TemplateField – The TemplateField column consists of ItemTemplate.
ItemTemplate – The ItemTemplate contains of a Button.
 
The Button has been assigned with the following property:
CommandName – For specifying which Button was clicked.
 
Button – For redirecting to another page.
The Button has been assigned with an OnClick event handler.
<asp:GridView ID="gvCustomers" runat="server" AutoGenerateColumns="false">
    <Columns>
        <asp:BoundField DataField="CustomerID" HeaderText="Customer Id" />
        <asp:BoundField DataField="City" HeaderText="City" />
        <asp:BoundField DataField="PostalCode" HeaderText="Postal Code" />
        <asp:TemplateField>
            <ItemTemplate>
                <asp:Button ID="btnSelect" runat="server" Text="Select" CommandName="Select" />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>
<br />
<asp:Button ID="btnSend" runat="server" Text="Send Selected Row" OnClick="Send" />
 
 

Destination

The following HTML Markup consists of:
Label – For displaying selected record.
<asp:Label ID="lblMessage" runat="server"></asp:Label>
 
 

Namespaces

You will need to import the following namespaces.
C#
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
 
VB.Net
Imports System.Data
Imports System.Data.SqlClient
Imports System.Configuration
 
 

Populating GridView using C# and VB.Net

Inside the Page_Load event handler, first the connection string is read from the Web.Config file and the SELECT query is defined.
Note: For more details on how to read connection string from Web.Config file, please refer my article Read or Write Connection Strings in Web.Config file using ASP.Net using C# and VB.Net.
 
Then, a connection to the database is established using the SqlConnection class.
The SqlDataAdapter object is initialized with the SqlCommand and using the Fill function, the DataTable is populated with the records from database.
Finally, the DataTable is assigned to the DataSource property of GridView and the GridView is populated.
C#
protected void Page_Load(object sender, EventArgs e)
{
    if (!this.IsPostBack)
    {
        string sql = "SELECT CustomerID, City, PostalCode FROM Customers";
        string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
        using (SqlConnection con = new SqlConnection(constr))
        {
            using (SqlDataAdapter sda = new SqlDataAdapter(sql, con))
            {
                using (DataTable dt = new DataTable())
                {
                    sda.Fill(dt);
                    gvCustomers.DataSource = dt;
                    gvCustomers.DataBind();
                }
            }
        }
    }
}
 
VB.Net
Protected Sub Page_Load(ByVal sender As ObjectByVal e As EventArgs) Handles Me.Load
    If Not Me.IsPostBack Then
        Dim sql As String "SELECT CustomerID, City, PostalCode FROM Customers"
        Dim constr As String ConfigurationManager.ConnectionStrings("constr").ConnectionString
        Using con As SqlConnection = New SqlConnection(constr)
            Using sda As SqlDataAdapter = New SqlDataAdapter(sql, con)
                Using dt As DataTable = New DataTable()
                    sda.Fill(dt)
                    gvCustomers.DataSource = dt
                    gvCustomers.DataBind()
                End Using
            End Using
        End Using
    End If
End Sub
 
 

Pass the Selected GridView row to another page

When the Send Button is clicked, first a check is performed if a GridView Row is selected then the Page is redirected to another Page using Server.Transfer function.
And if not then appropriate message will be displayed in JavaScript Alert Message Box using RegisterStartupScript method.
Note: Here Server.Transfer is used instead of Response.Redirect, since when Server.Transfer is used to redirect from one Page to another, the Previous Page and its controls are accessible using the PreviousPage property.
 
C#
protected void Send(object sender, EventArgs e)
{
    if (gvCustomers.SelectedRow != null)
    {
        Server.Transfer("~/Page2.aspx");
    }
    else
    {
        ClientScript.RegisterStartupScript(this.GetType(), "alert""alert('Please select a row.')"true);
    }
}
 
VB.Net
Protected Sub Send(ByVal sender As ObjectByVal e As EventArgs)
    If gvCustomers.SelectedRow IsNot Nothing Then
        Server.Transfer("~/Page2.aspx")
    Else
        ClientScript.RegisterStartupScript(Me.GetType(), "alert""alert('Please select a row.')"True)
    End If
End Sub
 
 

Accessing the selected GridView Row on another Page

Inside the Page_Load event handler, a check is performed if the PreviousPage is not NULL.
Then, the GridView of the Previous Page is accessed using the PreviousPage property of Page and then its Selected Row values are fetched.
The message is set using string.Format method where the cell index value is passed.
Finally, the message is displayed in Label control.
C#
protected void Page_Load(object sender, EventArgs e)
{
    if (this.Page.PreviousPage != null)
    {
        GridView gvCustomers = (GridView)this.Page.PreviousPage.FindControl("gvCustomers");
        GridViewRow selectedRow gvCustomers.SelectedRow;
        string message = string.Format("<b>CustomerId</b>: {0}<br /><b>City</b>: {1}<br /><b>PostalCode</b>: {2}", selectedRow.Cells[0].Text, selectedRow.Cells[1].Text, selectedRow.Cells[2].Text);
        lblMessage.Text = message;
    }
}
 
VB.Net
Protected Sub Page_Load(ByVal sender As ObjectByVal e As EventArgs)
    If Me.Page.PreviousPage IsNot Nothing Then
        Dim gvCustomers As GridView = CType(Me.Page.PreviousPage.FindControl("gvCustomers"), GridView)
        Dim selectedRow As GridViewRow gvCustomers.SelectedRow
        Dim message As String = String.Format("<b>CustomerId</b>: {0}<br /><b>City</b>: {1}<br /><b>PostalCode</b>: {2}", selectedRow.Cells(0).Text, selectedRow.Cells(1).Text, selectedRow.Cells(2).Text)
        lblMessage.Text = message
    End If
End Sub
 
 

Screenshot

Pass Selected Row of ASP.Net GridView control to another Page
 
 

Demo

 
 

Downloads