【发布时间】:2014-07-12 00:37:47
【问题描述】:
更新和取消按钮不起作用,这些按钮在网格视图之外
场景: 默认 asp.net gridview 设计的问题是 GridView 编辑列总是占用一些屏幕空间。此外,在编辑模式下,GridView 水平扩展,扰乱了页面布局。这就是为什么我想呈现一个可编辑的 GridView 而不显示默认的编辑、更新和取消按钮
示例:
我已经做了什么
当您看到 Gridview 的 html 源代码时,您会发现以下编辑、更新、取消链接按钮,其中包含一个名为 dopostback 的事件
例如
<a href="javascript:__doPostBack(ctl00$ContentPlaceHolder1$GridView2;Edit${1};)">Edit</a>
如果您以某种方式生成相同的上述脚本并为某些客户端事件(例如单击按钮)执行它,那么您基本上可以将相同的命令发送到 GridView 控件。最简单的方法是处理 GridView 控件的 RowDataBound 事件,所以我决定在 Gridview 控件的 RowDataBound 事件上使用它,如下所示:
protected void GridView2_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
if (e.Row.RowIndex == GridView2.EditIndex)
{
//update or cancel buttons
LinkButton updateBtn = (LinkButton)e.Row.Cells[0].Controls[0];
string updateScript = ClientScript.GetPostBackClientHyperlink(updateBtn, "");
Button1.Attributes["onclick"] = updateScript;
string cancelScript = string.Format("javascript:__doPostBack('ctl00$ContentPlaceHolder1$GridView2','Cancel${1}')",
GridView1.ID, e.Row.RowIndex);
Button2.Attributes["onclick"] = cancelScript;
}
else
{
//edit button
string editScript = string.Format("javascript:__doPostBack('ctl00$ContentPlaceHolder1$GridView2','Edit${1}')",
GridView1.ID, e.Row.RowIndex);
e.Row.Attributes["onclick"] = editScript;
}
}
if (GridView2.EditIndex >= 0)
{
Button1.Enabled = true;
Button2.Enabled = true;
}
else
{
Button1.Enabled = false;
Button2.Enabled = false;
}
}
现在,当我单击 gridview 的任何行时,它将成为一个可编辑的行,应该通过 gridview 之外的取消和更新按钮取消和更新,但它们不起作用......
任何帮助或建议将不胜感激。
注意:您仍然需要在 Gridview 中包含编辑、更新、取消链接按钮,稍后您可以使用下面的 jquery 之类的脚本将其从 gridview 中隐藏。
例如
$(document).ready(function () {
$("#GridView2 th:first-child").hide();
$("#GridView2 td:first-child").hide();
});
【问题讨论】:
-
你在处理
OnRowCancelingEdit,OnRowUpdatinggridview的事件吗? -
@HassanNisar 不,我不是我只是在处理编辑、更新和删除链接按钮的 dopostback 事件的生成事件编辑按钮的 __doPostBack() 调用将 GridView 的 ID 作为第一个参数和Edit$
形式的行号作为第二个参数。 Update 按钮的 __doPostBack() 调用将第一个参数作为控件的唯一 ID 传递。 Cancel 按钮的 __doPostBack() 与 Edit 按钮非常相似,只是使用的命令名称不是 Edit 而是 Cancel -
请远离直接调用 __doPostback,这是一个可怕的 hack,因为 doPostback 有下划线是有原因的(应该被认为是私有的)。我会尽快发布一个应该有帮助的答案。
-
@julealgon 我不害怕直接使用 dopostback 因为它可以轻松处理以防止任何黑客攻击。等待您的回复
-
@SiddiqBaig 你在哪里更新行?
updateBtn是否有任何服务器端事件处理程序?