我有一个具有编辑/更新功能的GridView。但是,当我点击它一次时,它没有开火。我必须再次点击它才能开火。休息部分工作正常。
有人可以告诉我发生了什么事吗?这是我的GV的标记:
<asp:GridView ID="gvShowRegistration" runat="server"
Height="204px" Width="678px"
OnRowEditing = "gvShowRegistration_RowEditing"
OnRowUpdating = "gvShowRegistration_RowUpdating"
OnRowCancelingEdit = "gvShowRegistration_RowCancelingEdit" CssClass="menu">
<Columns>
<asp:CommandField HeaderText="Edit" ShowEditButton="True" ShowHeader="True" ShowSelectButton="True" />
</Columns>
</asp:GridView>
public partial class Testing : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string getEntity = Request.QueryString["EntityID"];
int getIntEntity = Int16.Parse(getEntity);
TestLinq2SqlVs1DataContext dt = new TestLinq2SqlVs1DataContext();
var tr = from r in dt.Users
join s in dt.Entities on r.Entity_ID equals s.ID
where s.ID == getIntEntity
select new
{
};
gvShowRegistration.DataSource = tr;
gvShowRegistration.DataBind();
}
protected void gvShowRegistration_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
//Update code goes here!!!
}
protected void gvShowRegistration_RowEditing(object sender, GridViewEditEventArgs e)
{
gvShowRegistration.EditIndex = e.NewEditIndex;
}
protected void gvShowRegistration_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
gvShowRegistration.EditIndex = -1;
}
}
答案 0 :(得分:2)
我不希望你选择我的答案,但你应该将你的datacontext包装在using
块中:
protected void Page_Load(object sender, EventArgs e)
{
string getEntity = Request.QueryString["EntityID"];
int getIntEntity = Int16.Parse(getEntity);
using (TestLinq2SqlVs1DataContext dt = new TestLinq2SqlVs1DataContext())
{
var tr = from r in dt.Users
join s in dt.Entities on r.Entity_ID equals s.ID
where s.ID == getIntEntity
select new
{
};
gvShowRegistration.DataSource = tr;
gvShowRegistration.DataBind();
}
}
它会自动将你的LINQ包装在try / catch块中并在之后处理它。
答案 1 :(得分:1)
将其放入另一种方法
private void BindData(int id)
{
TestLinq2SqlVs1DataContext dt = new TestLinq2SqlVs1DataContext();
var tr = from r in dt.Users
join s in dt.Entities on r.Entity_ID equals s.ID
where s.ID == id select new
{
};
gvShowRegistration.DataSource = tr;
gvShowRegistration.DataBind();
}
on Page Load执行此操作:
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostback())
{
BindData(Request.QueryString["EntityId"]);
}
}
这只是修复的一半,是什么导致EntityId发生变化?它会在回发中改变吗?如果是这样,你将不得不调整它。
答案 2 :(得分:1)
将您在page_load事件中编写的代码放在类似
的函数中private void Binddata()
{
string getEntity = Request.QueryString["EntityID"];
int getIntEntity = Int16.Parse(getEntity);
TestLinq2SqlVs1DataContext dt = new TestLinq2SqlVs1DataContext();
var tr = from r in dt.Users
join s in dt.Entities on r.Entity_ID equals s.ID
where s.ID == getIntEntity
select new
{
};
gvShowRegistration.DataSource = tr;
gvShowRegistration.DataBind();
}
在row_editing和row_cancellingedit事件上调用此函数,如下所示
protected void gvShowRegistration_RowEditing(object sender, GridViewEditEventArgs e)
{
gvShowRegistration.EditIndex = e.NewEditIndex;
Binddata();
}
protected void gvShowRegistration_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
gvShowRegistration.EditIndex = -1;
Binddata();
}