Hi there,
Can you please help me with rebinding my gridview after a row is deleted.
The Datatable that is the datasource for the grid is kept in a session variable on the page. When the user deletes a row from the grid, t
he row is removed from the datatable and the Session datatable is rebound to the gridview. But, when i do this, the gridview displays the correct number of rows but with no data in it.
Teh page design is like so:
<asp:UpdatePanel ID="updPanelResults" runat="server">
<ContentTemplate>
<asp:Panel ID="selectedResultsPanel"runat="server" Width="100%">
<table width="100%" border="0"><tr>
<td class="labelText" colspan="4">
<asp:GridView ID="grdCases" runat="server" AutoGenerateColumns="false" CellPadding="4"
Visible="false" OnRowCommand="grdCases_RowCommand" OnRowDeleting="grdCases_RowDeleting1">
<HeaderStyle BackColor="Desktop" CssClass="TABLEHEAD" ForeColor="Black" />
<Columns>
<asp:BoundField DataField="RowNumber" HeaderText="Row Number" Visible="false" />
<asp:TemplateField HeaderText="Make">
<HeaderStyle CssClass="grdHeaderStyle" />
<ItemTemplate>
<asp:Label ID="lblmake" runat="server" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Model">
<HeaderStyle CssClass="grdHeaderStyle" />
<ItemTemplate>
<asp:Label ID="lblmodel" runat="server" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Registration">
<HeaderStyle CssClass="grdHeaderStyle" />
<ItemTemplate>
<asp:Label ID="lblReg" runat="server" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Colour">
<HeaderStyle CssClass="grdHeaderStyle" />
<ItemTemplate>
<asp:Label ID="lblcolour" runat="server" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Current Kms">
<HeaderStyle CssClass="grdHeaderStyle" />
<ItemTemplate>
<asp:Label ID="lblcurrKms" runat="server" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Province">
<HeaderStyle CssClass="grdHeaderStyle" />
<ItemTemplate>
<asp:Label ID="lblprovince" runat="server" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="No Of Vehs">
<HeaderStyle CssClass="grdHeaderStyle" />
<ItemTemplate>
<asp:Label ID="lblvehs" runat="server" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Accessories">
<HeaderStyle CssClass="grdHeaderStyle" />
<ItemTemplate>
<asp:Label ID="lblaccs" runat="server" />
<headerstyle cssclass="grdHeaderStyle" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Product">
<HeaderStyle CssClass="grdHeaderStyle" />
<ItemTemplate>
<asp:Label ID="lblproduct" runat="server" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Month">
<HeaderStyle CssClass="grdHeaderStyle" />
<ItemTemplate>
<asp:Label ID="lblmonths" runat="server" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Usage">
<HeaderStyle CssClass="grdHeaderStyle" />
<ItemTemplate>
<asp:Label ID="lblusage" runat="server" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField >
<itemtemplate>
<asp:ImageButton ID="ImageButton1" runat="server" CommandName='DeleteItem' CommandArgument='<%# Container.DataItemIndex %>' ImageUrl="~/images/del.jpg" />
</itemtemplate>
<itemstyle width="2%" />
</asp:TemplateField>
</Columns>
<RowStyle CssClass="grdItemStyle" />
<PagerStyle CssClass="grdPagerStyle" ForeColor="Black" />
</asp:GridView>
</td>
</tr>
The code is as follows:
protected void grdCases_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "DeleteItem")
{
int param = Convert.ToInt32(e.CommandArgument);
DataTable dt = (DataTable)Session ["CurrentTable"];
DataRow dr = dt.Rows[param];
dt.Rows.Remove(dr);
Session ["CurrentTable"] = dt;
RefreshGrid(dt);
}
}
private void RefreshGrid(DataTable dt)
{
grdCases.DataSource = null;
grdCases.DataBind();
grdCases.DataSource = dt;
grdCases.DataBind();
}
protected void grdCases_RowDeleting1(object sender, GridViewDeleteEventArgs e)
{
}
Please advice.
Thanks.