Asp.net gridview在行编辑时消失,在两个函数之间单击可将其恢复为展开项
我不确定这是否奇怪,但我有一个gridview,它在行编辑中消失了 我的步骤是>单击butUsers>单击编辑>网格分解>单击butDev>网格返回>单击butUsers>网格加载,我选择的项目处于编辑模式 我的活动缺少什么 谢谢 代码隐藏Asp.net gridview在行编辑时消失,在两个函数之间单击可将其恢复为展开项,asp.net,gridview,editing,Asp.net,Gridview,Editing,我不确定这是否奇怪,但我有一个gridview,它在行编辑中消失了 我的步骤是>单击butUsers>单击编辑>网格分解>单击butDev>网格返回>单击butUsers>网格加载,我选择的项目处于编辑模式 我的活动缺少什么 谢谢 代码隐藏 using System; using System.Collections.Generic; using System.Linq; using System.Data; using System.Web; using System.Web.UI; usin
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页
<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>
资产编号:
中央处理器:
装运日期:
在页面加载期间只需绑定一次。我认为这个代码块在当前代码中的每次回发时都会执行,所以这可能是重新绑定数据表。您可以通过在调试模式下的pageload上放置断点进行检查(每次回发时都会调用该断点)。这可能会解决你的问题
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);
}
}
编辑
我从您的代码中了解到,您在pageLoad
上初始化数据表和表适配器。现在,我们将初始化代码放入if(!Page.IsPostBack)
中,您将获得空引用,因为它们尚未初始化(它们是在PageLoad事件中初始化的)
记住HTTP是无状态的
。要在每次回发时保存这些表的状态,您可以使用Viewstate或Session。当我单击butUsers时,我现在得到[code]SCRIPT5022:Sys.WebForms.PageRequestManagerServerErrorException:对象引用未设置为对象的实例。[/code]我想它指的是dtEquipment,当我单击butDev时,我得到了相同的错误,但它指的是dtEquipment我如何使用会话或视图状态,你能给我一个示例吗?谢谢