Click here to Skip to main content
15,898,826 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
XML
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="gridviewdynamic.aspx.vb" Inherits="gridviewdynamic" %>

<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title>Add Dynamic Rows In Gridview</title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <asp:GridView ID="grvStudentDetails" runat="server" ShowFooter="True" AutoGenerateColumns="False"
                CellPadding="4" ForeColor="#333333" GridLines="None" OnRowDeleting="grvStudentDetails_RowDeleting"
                Width="97%" Style="text-align: left"
               >
                <Columns>
                    <asp:BoundField DataField="RowNumber" HeaderText="SNo" />
                    <asp:TemplateField HeaderText="Student Name">
                        <ItemTemplate>
                            <asp:TextBox ID="txtName" runat="server" MaxLength="50"></asp:TextBox>
                            <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="txtName"
                                ErrorMessage="*" SetFocusOnError="True"></asp:RequiredFieldValidator>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="Student Age">
                        <ItemTemplate>
                            <asp:TextBox ID="txtAge" runat="server" MaxLength="3" Width="66px"></asp:TextBox>
                            <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ControlToValidate="txtAge"
                                ErrorMessage="*" SetFocusOnError="True"></asp:RequiredFieldValidator>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="Student Address">
                        <ItemTemplate>
                            <asp:TextBox ID="txtAddress" runat="server" Height="55px" TextMode="MultiLine"></asp:TextBox>
                            <asp:RequiredFieldValidator ID="RequiredFieldValidator3" runat="server" ControlToValidate="txtAddress"
                                ErrorMessage="*" SetFocusOnError="True"></asp:RequiredFieldValidator>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="Gender">
                        <ItemTemplate>
                            <asp:RadioButtonList ID="RBLGender" runat="server" RepeatDirection="Horizontal">
                                <asp:ListItem Value="M">Male</asp:ListItem>
                                <asp:ListItem Value="F">Female</asp:ListItem>
                            </asp:RadioButtonList>
                            <asp:RequiredFieldValidator ID="RequiredFieldValidator4" runat="server" ControlToValidate="RBLGender"
                                ErrorMessage="*"></asp:RequiredFieldValidator>&nbsp;
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="Qualification">
                        <ItemTemplate>
                            <asp:DropDownList ID="drpQualification" runat="server">
                                <asp:ListItem>Select</asp:ListItem>
                                <asp:ListItem Value="G">Graduate</asp:ListItem>
                                <asp:ListItem Value="P">Post Graduate</asp:ListItem>
                            </asp:DropDownList>
                            <asp:RequiredFieldValidator ID="RequiredFieldValidator5" runat="server" ControlToValidate="drpQualification"
                                ErrorMessage="*" InitialValue="Select"></asp:RequiredFieldValidator>
                        </ItemTemplate>
                        <FooterStyle HorizontalAlign="Right" />
                        <FooterTemplate>
                            <asp:Button ID="ButtonAdd" runat="server" Text="Add New Row" OnClick="ButtonAdd_Click" />
                        </FooterTemplate>
                    </asp:TemplateField>
                    <asp:CommandField ShowDeleteButton="True" />
                </Columns>
                <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
                <RowStyle BackColor="#EFF3FB" />
                <EditRowStyle BackColor="#2461BF" />
                <SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
                <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />
                <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
                <AlternatingRowStyle BackColor="White" />
            </asp:GridView>
            <br />
            <center>
                <asp:Button ID="btnSave" runat="server" Text="Save Data" OnClick="btnSave_Click" />
            </center>
        </div>
    </form>
</body>
</html>



VB
Imports System.Collections
Imports System.Configuration
Imports System.Data
Imports System.Web
Imports System.Web.Security
Imports System.Web.UI.HtmlControls
Imports System.Web.UI.WebControls
Imports System.Web.UI.WebControls.WebParts
Imports System.Web.UI


Partial Public Class gridviewdynamic
    Inherits System.Web.UI.Page
    Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
        If Not Page.IsPostBack Then
            FirstGridViewRow()
        End If
    End Sub
    Private Sub FirstGridViewRow()
        Dim dt As New DataTable()
        Dim dr As DataRow = Nothing
        dt.Columns.Add(New DataColumn("RowNumber", GetType(String)))
        dt.Columns.Add(New DataColumn("Col1", GetType(String)))
        dt.Columns.Add(New DataColumn("Col2", GetType(String)))
        dt.Columns.Add(New DataColumn("Col3", GetType(String)))
        dt.Columns.Add(New DataColumn("Col4", GetType(String)))
        dt.Columns.Add(New DataColumn("Col5", GetType(String)))
        dr = dt.NewRow()
        dr("RowNumber") = 1
        dr("Col1") = String.Empty
        dr("Col2") = String.Empty
        dr("Col3") = String.Empty
        dr("Col4") = String.Empty
        dr("Col5") = String.Empty
        dt.Rows.Add(dr)

        ViewState("CurrentTable") = dt


        grvStudentDetails.DataSource = dt
        grvStudentDetails.DataBind()


        Dim txn As TextBox = DirectCast(grvStudentDetails.Rows(0).Cells(1).FindControl("txtName"), TextBox)
        txn.Focus()
        Dim btnAdd As Button = DirectCast(grvStudentDetails.FooterRow.Cells(5).FindControl("ButtonAdd"), Button)
        Page.Form.DefaultFocus = btnAdd.ClientID

    End Sub
    Private Sub AddNewRow()
        Dim rowIndex As Integer = 0

        If ViewState("CurrentTable") IsNot Nothing Then
            Dim dtCurrentTable As DataTable = DirectCast(ViewState("CurrentTable"), DataTable)
            Dim drCurrentRow As DataRow = Nothing
            If dtCurrentTable.Rows.Count > 0 Then
                For i As Integer = 1 To dtCurrentTable.Rows.Count
                    Dim TextBoxName As TextBox = DirectCast(grvStudentDetails.Rows(rowIndex).Cells(1).FindControl("txtName"), TextBox)
                    Dim TextBoxAge As TextBox = DirectCast(grvStudentDetails.Rows(rowIndex).Cells(2).FindControl("txtAge"), TextBox)
                    Dim TextBoxAddress As TextBox = DirectCast(grvStudentDetails.Rows(rowIndex).Cells(3).FindControl("txtAddress"), TextBox)
                    Dim RBLGender As RadioButtonList = DirectCast(grvStudentDetails.Rows(rowIndex).Cells(4).FindControl("RBLGender"), RadioButtonList)
                    Dim DrpQualification As DropDownList = DirectCast(grvStudentDetails.Rows(rowIndex).Cells(5).FindControl("drpQualification"), DropDownList)
                    drCurrentRow = dtCurrentTable.NewRow()
                    drCurrentRow("RowNumber") = i + 1

                    dtCurrentTable.Rows(i - 1)("Col1") = TextBoxName.Text
                    dtCurrentTable.Rows(i - 1)("Col2") = TextBoxAge.Text
                    dtCurrentTable.Rows(i - 1)("Col3") = TextBoxAddress.Text
                    dtCurrentTable.Rows(i - 1)("Col4") = RBLGender.SelectedValue
                    dtCurrentTable.Rows(i - 1)("Col5") = DrpQualification.SelectedValue
                    rowIndex += 1
                Next
                dtCurrentTable.Rows.Add(drCurrentRow)
                ViewState("CurrentTable") = dtCurrentTable

                grvStudentDetails.DataSource = dtCurrentTable
                grvStudentDetails.DataBind()

                Dim txn As TextBox = DirectCast(grvStudentDetails.Rows(rowIndex).Cells(1).FindControl("txtName"), TextBox)
                ' txn.Focus;
                txn.Focus()
            End If
        Else
            Response.Write("ViewState is null")
        End If
        SetPreviousData()
    End Sub
    Private Sub SetPreviousData()
        Dim rowIndex As Integer = 0
        If ViewState("CurrentTable") IsNot Nothing Then
            Dim dt As DataTable = DirectCast(ViewState("CurrentTable"), DataTable)
            If dt.Rows.Count > 0 Then
                For i As Integer = 0 To dt.Rows.Count - 1
                    Dim TextBoxName As TextBox = DirectCast(grvStudentDetails.Rows(rowIndex).Cells(1).FindControl("txtName"), TextBox)
                    Dim TextBoxAge As TextBox = DirectCast(grvStudentDetails.Rows(rowIndex).Cells(2).FindControl("txtAge"), TextBox)
                    Dim TextBoxAddress As TextBox = DirectCast(grvStudentDetails.Rows(rowIndex).Cells(3).FindControl("txtAddress"), TextBox)
                    Dim RBLGender As RadioButtonList = DirectCast(grvStudentDetails.Rows(rowIndex).Cells(4).FindControl("RBLGender"), RadioButtonList)
                    Dim DrpQualification As DropDownList = DirectCast(grvStudentDetails.Rows(rowIndex).Cells(5).FindControl("drpQualification"), DropDownList)
                    ' drCurrentRow["RowNumber"] = i + 1;

                    grvStudentDetails.Rows(i).Cells(0).Text = Convert.ToString(i + 1)
                    TextBoxName.Text = dt.Rows(i)("Col1").ToString()
                    TextBoxAge.Text = dt.Rows(i)("Col2").ToString()
                    TextBoxAddress.Text = dt.Rows(i)("Col3").ToString()
                    RBLGender.SelectedValue = dt.Rows(i)("Col4").ToString()
                    DrpQualification.SelectedValue = dt.Rows(i)("Col5").ToString()
                    rowIndex += 1
                Next
            End If
        End If
    End Sub
    Protected Sub ButtonAdd_Click(sender As Object, e As EventArgs)
        AddNewRow()
    End Sub
    Protected Sub grvStudentDetails_RowDeleting(sender As Object, e As GridViewDeleteEventArgs)
        SetRowData()
        If ViewState("CurrentTable") IsNot Nothing Then
            Dim dt As DataTable = DirectCast(ViewState("CurrentTable"), DataTable)
            Dim drCurrentRow As DataRow = Nothing
            Dim rowIndex As Integer = Convert.ToInt32(e.RowIndex)
            If dt.Rows.Count > 1 Then
                dt.Rows.Remove(dt.Rows(rowIndex))
                drCurrentRow = dt.NewRow()
                ViewState("CurrentTable") = dt
                grvStudentDetails.DataSource = dt
                grvStudentDetails.DataBind()

                For i As Integer = 0 To grvStudentDetails.Rows.Count - 2
                    grvStudentDetails.Rows(i).Cells(0).Text = Convert.ToString(i + 1)
                Next
                SetPreviousData()
            End If
        End If
    End Sub

    Private Sub SetRowData()
        Dim rowIndex As Integer = 0

        If ViewState("CurrentTable") IsNot Nothing Then
            Dim dtCurrentTable As DataTable = DirectCast(ViewState("CurrentTable"), DataTable)
            Dim drCurrentRow As DataRow = Nothing
            If dtCurrentTable.Rows.Count > 0 Then
                For i As Integer = 1 To dtCurrentTable.Rows.Count
                    Dim TextBoxName As TextBox = DirectCast(grvStudentDetails.Rows(rowIndex).Cells(1).FindControl("txtName"), TextBox)
                    Dim TextBoxAge As TextBox = DirectCast(grvStudentDetails.Rows(rowIndex).Cells(2).FindControl("txtAge"), TextBox)
                    Dim TextBoxAddress As TextBox = DirectCast(grvStudentDetails.Rows(rowIndex).Cells(3).FindControl("txtAddress"), TextBox)
                    Dim RBLGender As RadioButtonList = DirectCast(grvStudentDetails.Rows(rowIndex).Cells(4).FindControl("RBLGender"), RadioButtonList)
                    Dim DrpQualification As DropDownList = DirectCast(grvStudentDetails.Rows(rowIndex).Cells(5).FindControl("drpQualification"), DropDownList)
                    drCurrentRow = dtCurrentTable.NewRow()
                    drCurrentRow("RowNumber") = i + 1
                    dtCurrentTable.Rows(i - 1)("Col1") = TextBoxName.Text
                    dtCurrentTable.Rows(i - 1)("Col2") = TextBoxAge.Text
                    dtCurrentTable.Rows(i - 1)("Col3") = TextBoxAddress.Text
                    dtCurrentTable.Rows(i - 1)("Col4") = RBLGender.SelectedValue
                    dtCurrentTable.Rows(i - 1)("Col5") = DrpQualification.SelectedValue
                    rowIndex += 1
                Next

                'grvStudentDetails.DataSource = dtCurrentTable;
                'grvStudentDetails.DataBind();
                ViewState("CurrentTable") = dtCurrentTable
            End If
        Else
            Response.Write("ViewState is null")
        End If
        'SetPreviousData();
    End Sub
    Protected Sub btnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click
        Try
            SetRowData()
            Dim table As DataTable = TryCast(ViewState("CurrentTable"), DataTable)

            If table IsNot Nothing Then
                For Each row As DataRow In table.Rows
                    Dim txName As String = TryCast(row.ItemArray(1), String)
                    Dim txAge As String = TryCast(row.ItemArray(2), String)
                    Dim txAdd As String = TryCast(row.ItemArray(3), String)
                    Dim rbGen As String = TryCast(row.ItemArray(4), String)
                    Dim drpQual As String = TryCast(row.ItemArray(5), String)


                    If txName IsNot Nothing OrElse txAge IsNot Nothing OrElse txAdd IsNot Nothing OrElse rbGen IsNot Nothing OrElse drpQual IsNot Nothing Then
                        'Do whatever is needed with this data,
                        'Possibily push it in database
                        'I am just printing on the page to demonstrate that it is working.
                        Response.Write(String.Format("{0} {1} {2} {3} {4}<br/>", txName, txAge, txAdd, rbGen, drpQual))

                    End If
                Next
            End If
        Catch ex As Exception
            Throw New Exception(ex.Message)
        End Try
    End Sub


End Class
Posted
Updated 3-Feb-14 0:38am
v2
Comments
thatraja 3-Feb-14 5:32am    
What's the output? Embed as text or include a screenshot(use imgur.com)

1 solution

You already posted this at I have added the code for inserting values in the Database On Sava Data Button but every time click sava Data button the same values get Inserted two times?[^]. Please edit your original question rather than posting the same thing again.
 
Share this answer
 
Comments
Ni!E$H_WAGH 3-Feb-14 7:29am    
Please suggest me the Solution . New to this forum ...!
Richard MacCutchan 3-Feb-14 8:22am    
What solution? Go to your original question and use the Improve question" link, and add the extra details of the problem. It is no use just dumping a load of code here and expecting other people to try and work out why it does not work. And if you are new to the forum you should really read the QuickAnswers FAQ.
Ni!E$H_WAGH 3-Feb-14 10:24am    
Thanks for your Kind Suggestion.

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900