Xaisoft
Xaisoft

Reputation: 46651

Add Row to ASP.NET GridView?

I have the following GridView which has a couple DropDownLists and TextBoxes. How can I add a new row to it, while persisting the existing GridView. I would like to Add the New row with the LinkButton. I am not using DataSource Controls and the GridView is currently populated via a DataTable. Here is the GridView:

<asp:LinkButton ID="btnAdd" runat="server" Text="Add Room" 
        onclick="btnAdd_Click"></asp:LinkButton>
    <asp:GridView ID="gvRP" runat="server" AutoGenerateColumns="false" 
        onrowdatabound="gvRP_RowDataBound" 
        onrowediting="gvRP_RowEditing">
    <Columns>
    <asp:TemplateField HeaderText="Room" ItemStyle-Width="100%">
    <ItemTemplate>
    <asp:Label runat="server" Text="Room"></asp:Label>
    <asp:DropDownList ID="ddlRoom" runat="server" AutoPostBack="True" DataTextField="Name"
        DataValueField="Id" AppendDataBoundItems="true" OnSelectedIndexChanged="ddlRoom_SelectedIndexChanged">
        <asp:ListItem Value="-1">Select...</asp:ListItem>
    </asp:DropDownList>
    <asp:Label runat="server" AssociatedControlID="ddlRate" Text="Rate" ID="lblRate"></asp:Label><asp:DropDownList
        ID="ddlRate" runat="server" AppendDataBoundItems="true" DataTextField="Name"
        DataValueField="Id">
        <asp:ListItem Value="-1">Select...</asp:ListItem>
    </asp:DropDownList>

    <asp:Label  runat="server" Text="Adults"></asp:Label>
    <asp:TextBox ID="txtAdults" Text='<%#Bind("Adults") %>' runat="server" Width="25px"></asp:TextBox>
    <asp:Label  runat="server" Text="Children"></asp:Label>
    <asp:TextBox ID="txtChildren" Text='<%#Bind("Children") %>' runat="server"  Width="25px"></asp:TextBox>
    <asp:Label runat="server" Text="Check In"></asp:Label>
    <asp:TextBox ID="txtCheckIn" Text='<%#Bind("CheckIn") %>' runat="server" Width="75px"></asp:TextBox>
    <asp:Label  runat="server" Text="Check Out"></asp:Label>
    <asp:TextBox ID="txtCheckOut" Text='<%#Bind("CheckOut") %>' runat="server"  Width="75px"></asp:TextBox>

    <h3>Rates</h3>
    <asp:GridView ID="gvR" runat="server" AutoGenerateColumns="false">
    <Columns>
    <asp:BoundField DataField="Name" HeaderText="Rate" />
    <asp:BoundField DataField="Effective" HeaderText="Effective" />
    <asp:BoundField DataField="Expire" HeaderText="Expire" />
    <asp:BoundField DataField="Amount" HeaderText="Amount" />
    <asp:BoundField DataField="Code" HeaderText="Currency" />
    </Columns>
    </asp:GridView>
    </ItemTemplate>
    </asp:TemplateField>
    </Columns>
    </asp:GridView>

Upvotes: 4

Views: 40510

Answers (4)

Xaisoft
Xaisoft

Reputation: 46651

I decided to go with this solution:

DataTable dt = new DataTable();

DataColumn dcRoom = new DataColumn("Room", typeof(DropDownList));
DataColumn dcAdults = new DataColumn("Adults", typeof(string));
DataColumn dcChildren = new DataColumn("Children", typeof(string));
DataColumn dcCheckIn = new DataColumn("CheckIn", typeof(string));
DataColumn dcCheckOut = new DataColumn("CheckOut", typeof(string));

dt.Columns.AddRange(new DataColumn[] { dcRoom, dcAdults, dcChildren, dcCheckIn, dcCheckOut });

dt.Rows.Add(new object[] { new DropDownList(), "", "", "", "" });
gvRP.DataSource = dt;
gvRP.DataBind();

How does it know What to put in the DropDown (Select...) and I haven't specified two DropDowns, yet it still puts the second DropDown.

Upvotes: 0

sanjeev
sanjeev

Reputation: 600

namespace gridview_row_add
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            DataGridViewTextBoxColumn columntype = new DataGridViewTextBoxColumn();
            columntype.HeaderText = "Type";
            columntype.Width = 80;
            dataGridView1.Columns.Add(columntype);

            DataGridViewTextBoxColumn columnparameters = new DataGridViewTextBoxColumn();
            columnparameters.HeaderText = "Parameters";
            columnparameters.Width = 320;
            dataGridView1.Columns.Add(columnparameters);

            DataGridViewTextBoxColumn columndisplay = new DataGridViewTextBoxColumn();
            columndisplay.HeaderText = "Display";
            columndisplay.Width = 150;
            dataGridView1.Columns.Add(columndisplay);

            DataGridViewTextBoxColumn enumuration = new DataGridViewTextBoxColumn();
            enumuration.HeaderText = "Format";
            enumuration.Width = 90;
            dataGridView1.Columns.Add(enumuration);

            dataGridView1.AllowUserToAddRows = false;//please add this if u don't want to add exta rows or else make it true.          
        }

        private void button1_Click(object sender, EventArgs e)
        {
            dataGridView1.Rows.Add();//here on each click the new row will be added.

            int rowcount = dataGridView1.Rows.Count;

            dataGridView1.Rows[rowcount - 1].Cells[0].Value = "data" + rowcount.ToString();
            dataGridView1.Rows[rowcount-1].Cells[1].Value = "field";
            dataGridView1.Rows[rowcount-1].Cells[2].Value = "xyzzz";
            dataGridView1.Rows[rowcount-1].Cells[3].Value = "hts";

            rowcount++;                     
        }
    }
}

this code works fine for me. in this code i added four headers in girdview, you can change them as per your requirement..one button click it will add new row first then data got filled in that row.. hope this will work for you..

Upvotes: -1

Emad Mokhtar
Emad Mokhtar

Reputation: 3297

Put Label control or Textbox as you like inside ItemTemplate if you put it at last it'll be displayed at last, for example

<ItemTemplate>
    ....
    <asp:Label Text="foo" runat="server" />
</ItemTemplate>

or

 <ItemTemplate>
    <asp:Label Text="foo" runat="server" />
     ....
 </ItemTemplate>

Upvotes: 0

Chase Florell
Chase Florell

Reputation: 47417

Usually I try and do an example, but this one is quite thorough, and I don't "think" the url is going anywhere. Please refer to this link for a comprehensive example.

Here's the important code.

grid

<FooterStyle HorizontalAlign="Right" />
<FooterTemplate>
    <asp:Button ID="ButtonAdd" runat="server" Text="Add New Row" />
</FooterTemplate>

code behind

protected void ButtonAdd_Click(object sender, EventArgs e)
{
      AddNewRowToGrid()
}

private void AddNewRowToGrid()
{
    int rowIndex = 0;

    if (ViewState["CurrentTable"] != null)
    {
        DataTable dtCurrentTable = (DataTable)ViewState["CurrentTable"];
        DataRow drCurrentRow = null;
        if (dtCurrentTable.Rows.Count > 0)
        {
            for (int i = 1; i <= dtCurrentTable.Rows.Count; i++)
            {
                //extract the TextBox values
            }
            dtCurrentTable.Rows.Add(drCurrentRow);
            ViewState["CurrentTable"] = dtCurrentTable;

            Gridview1.DataSource = dtCurrentTable;
            Gridview1.DataBind();
        }
    }
    else
    {
        Response.Write("ViewState is null");
    }

    //Set Previous Data on Postbacks
    SetPreviousData();
}

Upvotes: 1

Related Questions