Reputation: 2587
Not sure if this is an odd one or not, but i have a gridview that dissapears on rowediting,
my steps are > click butUsers > click edit > grid dissapears > click butDev > grid is back > click ButUsers > grid loads with my selected item in editmode.
whats missing from my event?
Thanks
Codebehind
using System;
using System.Collections.Generic;
using System.Linq;
using System.Data;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class equipment : System.Web.UI.Page
{
public string strMode;
ParameterCollection pcEquip;
dsData.tblEquipmentDataTable dtEquipment;
dsDataTableAdapters.tblEquipmentTableAdapter taEquipment;
SqlDataSource dsEquipment;
protected void Page_Load(object sender, EventArgs e)
{
dtEquipment = new dsData.tblEquipmentDataTable();
taEquipment = new dsDataTableAdapters.tblEquipmentTableAdapter();
dsEquipment = new SqlDataSource();
smEquipment.RegisterAsyncPostBackControl(butUsers);
}
protected void butUsers_Click(object sender, EventArgs e)
{
hidMode.Value = "Users";
dtEquipment.Clear();
taEquipment.FillByUsers(dtEquipment);
gvItems.DataSource = dtEquipment;
gvItems.DataBind();
upTable.Update();
}
protected void butDevelopment_Click(object sender, EventArgs e)
{
//hidMode.Value = "Users";
dtEquipment.Clear();
taEquipment.FillByDev(dtEquipment);
gvItems.DataSource = dtEquipment;
gvItems.DataBind();
upTable.Update();
}
protected void gvItems_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
}
protected void gvItems_RowEditing(object sender, GridViewEditEventArgs e)
{
gvItems.EditIndex = e.NewEditIndex;
gvItems.DataSource = dtEquipment;
gvItems.DataBind();
upTable.Update();
}
}
ASPX PAGE
<asp:Content ID="cntCenter" ContentPlaceHolderID="CenterContent" runat="Server">
<asp:UpdatePanel runat="server" ID="upTable" UpdateMode="Conditional">
<ContentTemplate>
<asp:HiddenField runat="server" ID="hidMode" />
<grid:TemplateGridView
EnableTemplateEditing="True"
runat="server" ID="gvItems" OnRowDataBound="gvItems_RowDataBound" OnRowEditing="gvItems_RowEditing"
AutoGenerateColumns="False" DataKeyNames="ID" AllowPaging="True"
AllowSorting="True" CssClass="table" BorderStyle="None" BorderWidth="0px"
GridLines="None">
<Columns>
<asp:CommandField ShowEditButton="True" ShowDeleteButton="True" />
<asp:BoundField DataField="ID" HeaderText="ID" InsertVisible="False"
ReadOnly="True" SortExpression="ID" Visible="False" />
<asp:BoundField DataField="UserID" HeaderText="UserID"
SortExpression="UserID" Visible="False" />
<asp:BoundField DataField="AssetNo" HeaderText="Asset No"
SortExpression="AssetNo" />
<asp:BoundField DataField="Username" HeaderText="User Name"
SortExpression="Username" />
</Columns>
<EditItemTemplate>
<div class="details">
<asp:HiddenField ID="hidID" runat="server" Value='<%# Eval("ID") %>' />
<asp:HiddenField ID="hidUserID" runat="server" ClientIDMode="Static" Value='<%# Bind("UserID") %>' />
<table class="detailsview" cellpadding="0" cellspacing="0">
<tr>
<td class="td_title_align">Asset No:</td>
<td>
<asp:TextBox ID="txtAssetNo" runat="server" CssClass="edit_box" Text='<%# Bind("AssetNo") %>' />
</td>
<td class="td_title_align">CPU:</td>
<td>
<asp:TextBox ID="txtCPU" runat="server" CssClass="edit_box" Text='<%# Bind("CPU") %>' />
</td>
<td class="td_title_align">Shipped Date:</td>
<td>
<asp:TextBox ID="txtShippedDate" runat="server" CssClass="edit_box" Text='<%# Bind("ShippedDate", "{0:dd/MM/yyyy}") %>' />
</td>
</tr>
<tr>
<td colspan="8">
<div class="footer_command">
<asp:Button runat="server" ID="btnUpdate" CommandName="Update" Text="Update" CssClass="command_button" />
<asp:Button runat="server" ID="btnCancel" CommandName="Cancel" Text="Cancel" CssClass="command_button" />
</div>
</tr>
</table>
</div>
</td>
</tr>
</EditItemTemplate>
</grid:TemplateGridView>
</ContentTemplate>
</asp:UpdatePanel>
</asp:Content>
Upvotes: 0
Views: 375
Reputation: 13038
You only have to bind once during pageLoad. I think this code block executes on every Postback in your current code, so this might be rebinding your data tables. You can check by placing a break point on pageload in debug mode (This will be called on every postback). This might solve your problem
protected void Page_Load(object sender, EventArgs e)
{
if(!Page.IsPostback)
{
dtEquipment = new dsData.tblEquipmentDataTable();
taEquipment = new dsDataTableAdapters.tblEquipmentTableAdapter();
dsEquipment = new SqlDataSource();
smEquipment.RegisterAsyncPostBackControl(butUsers);
}
}
Edit
What I can understand from your code is that you were initializing data tables & table adapters on pageLoad
. Now after, we have put the initialization code inside if(!Page.IsPostBack)
you would get null references because they are not yet initialized (They were initialized on PageLoad event).
Remember HTTP is stateless
. To save state of these tables on each postback, you can either use Viewstate or Session.
Upvotes: 1