Add/Remove Gridview rows dynamically in asp.net
In this article i am going to explain how to add or remove rows from Gridview dynamically. First, a default row in the gridview is added with controls bound to it when the page loads. Then, the user can add or remove any number of rows to the gridview. Every time a new row is added the gridview is loaded from the ViewState. It is important to preserve the state of the DropDownList while adding another row therefore the selected value of the DropDownList should be bound with the DataField.
Default.aspx
<div>
<asp:GridView ID="gvBooks" runat="server" ShowFooter="True"
AutoGenerateColumns="False" HeaderStyle-CssClass="header-column" onrowcommand="gvBooks_RowCommand"
onrowdatabound="gvBooks_RowDataBound" BorderStyle="None" GridLines="None">
<Columns>
<asp:TemplateField HeaderText="Book Name">
<ItemTemplate>
<asp:TextBox ID="txtBookName" runat="server">
</asp:TextBox>
</ItemTemplate>
<FooterTemplate>
<asp:LinkButton ID="lbNewBook" runat="server" CausesValidation="false" CommandName="NewBook">New</asp:LinkButton>
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Author">
<ItemTemplate>
<asp:TextBox ID="txtAuthor" runat="server" Text='<%#Bind("Author") %>'></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Description">
<ItemTemplate>
<asp:TextBox ID="txtDescription" runat="server" Text='<%#Bind("Description") %>'></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Genre">
<ItemTemplate>
<asp:DropDownList ID="ddlGenre" runat="server" AppendDataBoundItems="true">
<asp:ListItem>Choose...</asp:ListItem>
<asp:ListItem>Computer</asp:ListItem>
<asp:ListItem>Fantasy</asp:ListItem>
<asp:ListItem>Horror</asp:ListItem>
<asp:ListItem>Comedy</asp:ListItem>
</asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Price">
<ItemTemplate>
<asp:TextBox ID="txtPercentage" runat="server" Width="100px" Text='<%#Bind("Price") %>'></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Publish Date">
<ItemTemplate>
<asp:TextBox ID="txtPublishDate" runat="server" Width="100px" Text='<%#Bind("PublishDate") %>'></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<asp:ImageButton ID="imgbtnDeleteBook" runat="server" CausesValidation="false" ImageUrl="~/App_Themes/Red/Images/cross.png" CommandName="DeleteBook" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</div>
<asp:GridView ID="gvBooks" runat="server" ShowFooter="True"
AutoGenerateColumns="False" HeaderStyle-CssClass="header-column" onrowcommand="gvBooks_RowCommand"
onrowdatabound="gvBooks_RowDataBound" BorderStyle="None" GridLines="None">
<Columns>
<asp:TemplateField HeaderText="Book Name">
<ItemTemplate>
<asp:TextBox ID="txtBookName" runat="server">
</asp:TextBox>
</ItemTemplate>
<FooterTemplate>
<asp:LinkButton ID="lbNewBook" runat="server" CausesValidation="false" CommandName="NewBook">New</asp:LinkButton>
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Author">
<ItemTemplate>
<asp:TextBox ID="txtAuthor" runat="server" Text='<%#Bind("Author") %>'></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Description">
<ItemTemplate>
<asp:TextBox ID="txtDescription" runat="server" Text='<%#Bind("Description") %>'></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Genre">
<ItemTemplate>
<asp:DropDownList ID="ddlGenre" runat="server" AppendDataBoundItems="true">
<asp:ListItem>Choose...</asp:ListItem>
<asp:ListItem>Computer</asp:ListItem>
<asp:ListItem>Fantasy</asp:ListItem>
<asp:ListItem>Horror</asp:ListItem>
<asp:ListItem>Comedy</asp:ListItem>
</asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Price">
<ItemTemplate>
<asp:TextBox ID="txtPercentage" runat="server" Width="100px" Text='<%#Bind("Price") %>'></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Publish Date">
<ItemTemplate>
<asp:TextBox ID="txtPublishDate" runat="server" Width="100px" Text='<%#Bind("PublishDate") %>'></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<asp:ImageButton ID="imgbtnDeleteBook" runat="server" CausesValidation="false" ImageUrl="~/App_Themes/Red/Images/cross.png" CommandName="DeleteBook" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</div>
Default.aspx.cs
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
AddBookDefault();
}
}
private void AddBookDefault()
{
DataTable dt = new DataTable();
DataRow dr = null;
dt.Columns.Add(new DataColumn("BookName", typeof(string)));
dt.Columns.Add(new DataColumn("Author", typeof(string)));
dt.Columns.Add(new DataColumn("Description", typeof(string)));
dt.Columns.Add(new DataColumn("Genre", typeof(string)));
dt.Columns.Add(new DataColumn("Price", typeof(string)));
dt.Columns.Add(new DataColumn("PublishDate", typeof(string)));
dr = dt.NewRow();
dr["BookName"] = string.Empty;
dr["Author"] = string.Empty;
dr["Description"] = string.Empty;
dr["Genre"] = string.Empty;
dr["Price"] = string.Empty;
dr["PublishDate"] = string.Empty;
dt.Rows.Add(dr);
//dr = dt.NewRow();
//Store the DataTable in ViewState
ViewState["CurrentTable"] = dt;
gvBooks.DataSource = dt;
gvBooks.DataBind();
}
protected void gvBooks_RowCommand(object sender, GridViewCommandEventArgs e)
{
int rowIndex = 0;
DataTable dt = (DataTable)ViewState["CurrentTable"];
if (e.CommandName == "NewBook")
{
DataRow rw = dt.NewRow();
dt.Rows.Add(rw);
//Set Previous Data
if (dt.Rows.Count > 0)
{
for (int i = 0; i < dt.Rows.Count - 1; i++)
{
TextBox txtBookName = (TextBox)gvBooks.Rows[rowIndex].Cells[0].FindControl("txtBookName");
TextBox txtAuthor = (TextBox)gvBooks.Rows[rowIndex].Cells[1].FindControl("txtAuthor");
TextBox txtDescription = (TextBox)gvBooks.Rows[rowIndex].Cells[2].FindControl("txtDescription");
DropDownList ddlGenre = (DropDownList)gvBooks.Rows[rowIndex].Cells[3].FindControl("ddlGenre");
TextBox txtPrice = (TextBox)gvBooks.Rows[rowIndex].Cells[4].FindControl("txtPrice");
TextBox txtPublishDate = (TextBox)gvBooks.Rows[rowIndex].Cells[5].FindControl("txtPublishDate");
dt.Rows[i]["BookName"] = txtBookName.Text;
dt.Rows[i]["Author"] = txtAuthor.Text;
dt.Rows[i]["Description"] = txtDescription.Text;
dt.Rows[i]["Genre"] = ddlGenre.SelectedItem.Text;
dt.Rows[i]["Price"] = txtPrice.Text;
dt.Rows[i]["PublishDate"] = txtPublishDate.Text;
rowIndex++;
}
}
}
else if (e.CommandName == "DeleteBook")
{
GridViewRow gvr = (GridViewRow)((ImageButton)e.CommandSource).NamingContainer;
dt.Rows.RemoveAt(gvr.RowIndex);
}
gvBooks.DataSource = dt;
gvBooks.DataBind();
}
protected void gvBooks_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
DropDownList ddlGenre = (DropDownList)e.Row.Cells[3].FindControl("ddlGenre");
ddlGenre.SelectedValue = DataBinder.Eval(e.Row.DataItem, "Genre").ToString();
}
}
{
if (!Page.IsPostBack)
{
AddBookDefault();
}
}
private void AddBookDefault()
{
DataTable dt = new DataTable();
DataRow dr = null;
dt.Columns.Add(new DataColumn("BookName", typeof(string)));
dt.Columns.Add(new DataColumn("Author", typeof(string)));
dt.Columns.Add(new DataColumn("Description", typeof(string)));
dt.Columns.Add(new DataColumn("Genre", typeof(string)));
dt.Columns.Add(new DataColumn("Price", typeof(string)));
dt.Columns.Add(new DataColumn("PublishDate", typeof(string)));
dr = dt.NewRow();
dr["BookName"] = string.Empty;
dr["Author"] = string.Empty;
dr["Description"] = string.Empty;
dr["Genre"] = string.Empty;
dr["Price"] = string.Empty;
dr["PublishDate"] = string.Empty;
dt.Rows.Add(dr);
//dr = dt.NewRow();
//Store the DataTable in ViewState
ViewState["CurrentTable"] = dt;
gvBooks.DataSource = dt;
gvBooks.DataBind();
}
protected void gvBooks_RowCommand(object sender, GridViewCommandEventArgs e)
{
int rowIndex = 0;
DataTable dt = (DataTable)ViewState["CurrentTable"];
if (e.CommandName == "NewBook")
{
DataRow rw = dt.NewRow();
dt.Rows.Add(rw);
//Set Previous Data
if (dt.Rows.Count > 0)
{
for (int i = 0; i < dt.Rows.Count - 1; i++)
{
TextBox txtBookName = (TextBox)gvBooks.Rows[rowIndex].Cells[0].FindControl("txtBookName");
TextBox txtAuthor = (TextBox)gvBooks.Rows[rowIndex].Cells[1].FindControl("txtAuthor");
TextBox txtDescription = (TextBox)gvBooks.Rows[rowIndex].Cells[2].FindControl("txtDescription");
DropDownList ddlGenre = (DropDownList)gvBooks.Rows[rowIndex].Cells[3].FindControl("ddlGenre");
TextBox txtPrice = (TextBox)gvBooks.Rows[rowIndex].Cells[4].FindControl("txtPrice");
TextBox txtPublishDate = (TextBox)gvBooks.Rows[rowIndex].Cells[5].FindControl("txtPublishDate");
dt.Rows[i]["BookName"] = txtBookName.Text;
dt.Rows[i]["Author"] = txtAuthor.Text;
dt.Rows[i]["Description"] = txtDescription.Text;
dt.Rows[i]["Genre"] = ddlGenre.SelectedItem.Text;
dt.Rows[i]["Price"] = txtPrice.Text;
dt.Rows[i]["PublishDate"] = txtPublishDate.Text;
rowIndex++;
}
}
}
else if (e.CommandName == "DeleteBook")
{
GridViewRow gvr = (GridViewRow)((ImageButton)e.CommandSource).NamingContainer;
dt.Rows.RemoveAt(gvr.RowIndex);
}
gvBooks.DataSource = dt;
gvBooks.DataBind();
}
protected void gvBooks_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
DropDownList ddlGenre = (DropDownList)e.Row.Cells[3].FindControl("ddlGenre");
ddlGenre.SelectedValue = DataBinder.Eval(e.Row.DataItem, "Genre").ToString();
}
}
No comments:
Post a Comment