Search - Articles
DevASP.NET for ASP.NET, VB.NET, XML and C# (C-Sharp) Developers Tuesday, March 03, 2009
Dev Articles
Search Directory
ASP.NET
VB.Net
C-Sharp
SQL Server
 

How to transfer selected rows from one GridView to another GridView in ASP.NET

Author: Alanna Kremer
Download Source Code : 1396_TransferDataToAnotherGridView.zip

Multiple selected rows from a GridView control can be transferred to another GridView control very easily.

 

There can be different ways to transfer multiple selected records of a GridView to another GridView. One way can be to create a copy of DataTable or DataSet which you are binding to first GridView. When you need to bind selected records to second GridView then you can get the ID of the record and bind those selected records to GridView from the copy of DataTable.
 
The other way is to create a new DataTable and add same number of columns to this DataTable and then add each selected row to DataTable for every column. I am going to use second way in this article to transfer selected rows from one GridView control to another GridView control.

Let’s see how we can do it. You can download source code.

  1. Open Visual Studio 2010
  2. File > New > Web Site
  3. Visual C# or Visual Basic > ASP.NET Empty Web Site > Click Ok
  4. Website > Add New Item > Web Form > Click Add
  5. Now Drag and Drop two GridView, SqlDataSource and Button in Default aspx page.
  6. Populate this GridView with data you want. I have populated it with “Products” table of “NORTHWIND” database.
  7. The code in Default.aspx page will be like below.

    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
        DataKeyNames="ProductID" DataSourceID="SqlDataSource1">
        <Columns>
            <asp:TemplateField HeaderText="Select">
                <ItemTemplate>
                    <asp:CheckBox ID="CheckBox1" runat="server" />
                </ItemTemplate>
             </asp:TemplateField>
     
            <asp:BoundField DataField="ProductID" HeaderText="ProductID"
                 InsertVisible="False" ReadOnly="True" SortExpression="ProductID" />
            <asp:BoundField DataField="ProductName" HeaderText="ProductName"
                 SortExpression="ProductName" />
            <asp:BoundField DataField="CategoryID" HeaderText="CategoryID"
                 SortExpression="CategoryID" />
            <asp:BoundField DataField="UnitPrice" HeaderText="UnitPrice"
                 SortExpression="UnitPrice" />
        </Columns>
    </asp:GridView>
    <asp:SqlDataSource ID="SqlDataSource1" runat="server"
        ConnectionString="<%$ ConnectionStrings:C:\SQL SERVER 2000 SAMPLE DATABASES\NORTHWND.MDFConnectionString %>"
        SelectCommand="SELECT [ProductID], [ProductName], [CategoryID], [UnitPrice] FROM [Products] WHERE ([UnitPrice] &lt;= @UnitPrice)">
        <SelectParameters>
            <asp:Parameter DefaultValue="10" Name="UnitPrice" Type="Decimal" />
         </SelectParameters>
    </asp:SqlDataSource>
    <br />
    <asp:Button ID="Button1" runat="server" Text="Show selected product below"
        onclick="Button1_Click" />
    <br />
    <br />
    <asp:GridView ID="GridView2" runat="server">
    </asp:GridView>
     
  8. Include System.Data namespace in your code file for DataTable and DataRow classes.
  9. Write code below in button click event

    C#
     
    protected void Button1_Click(object sender, EventArgs e)
    {
        DataTable dt = new DataTable();
     
        dt.Columns.Add("ProductID", typeof(int));
        dt.Columns.Add("ProductName", typeof(string));
        dt.Columns.Add("CategoryID", typeof(int));
        dt.Columns.Add("UnitPrice", typeof(decimal));
     
        foreach (GridViewRow gvRow in GridView1.Rows)
        {
            CheckBox checkbox = (CheckBox)gvRow.Cells[0].FindControl("CheckBox1");
            if (checkbox.Checked)
            {
                DataRow row = dt.NewRow();
                row["ProductID"] = gvRow.Cells[1].Text;
                row["ProductName"] = gvRow.Cells[2].Text;
                row["CategoryID"] = gvRow.Cells[3].Text;
                row["UnitPrice"] = gvRow.Cells[4].Text;
                dt.Rows.Add(row);
            }
        }
        GridView2.DataSource = dt;
        GridView2.DataBind();
    }
     
    VB.NET

    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim dt As New DataTable()
     
        dt.Columns.Add("ProductID", GetType(Integer))
        dt.Columns.Add("ProductName", GetType(String))
        dt.Columns.Add("CategoryID", GetType(Integer))
        dt.Columns.Add("UnitPrice", GetType(Decimal))
     
        For Each gvRow As GridViewRow In GridView1.Rows
            Dim checkbox As CheckBox = DirectCast(gvRow.Cells(0).FindControl("CheckBox1"), CheckBox)
            If checkbox.Checked Then
                Dim row As DataRow = dt.NewRow()
                row("ProductID") = gvRow.Cells(1).Text
                row("ProductName") = gvRow.Cells(2).Text
                row("CategoryID") = gvRow.Cells(3).Text
                row("UnitPrice") = gvRow.Cells(4).Text
                dt.Rows.Add(row)
            End If
        Next
        GridView2.DataSource = dt
        GridView2.DataBind()
    End Sub
     
    I have created a DataTable to add and also added four columns to DataTable. I have used foreach loop to iterate through GridView. I have used FindControl() method to find CheckBox control. When CheckBox is checked, I have created a DataRow, added GridView cell values of this row and added the row to DataTable. This foreach loop will continue for every selected row. I have bound this DataTable of selected records to second GridView control.
     
  10. Press F5 and see website in browser.
   
Add Article Comment:
Name :
Email Address :
   
Comments :
 
   
<< How to read remote web page contents in ASP.NET

Disclaimer - Privacy
© 2002-2017 DevASP.net