【发布时间】:2012-07-03 14:49:17
【问题描述】:
我不知道如何以编程方式将带有按钮的GridView 添加到UpdatePanel。
我可以使用按钮和标签等简单控件来完成此操作,但是当我尝试添加带有按钮的GridView 时,会出现完整的Postback()。
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
protected override void OnInit(EventArgs e)
{
UpdatePanel up1 = new UpdatePanel();
up1.ID = "UpdatePanel1";
Button button1 = new Button();
button1.ID = "Button1";
button1.Text = "Submit";
button1.Click += new EventHandler(Button_Click);
Label label1 = new Label();
label1.ID = "Label1";
label1.Text = "A full page postback occurred.";
GridView gv1 = new GridView();
//Where the xml gets bonded to the data grind
XmlDataSource xds = new XmlDataSource();
xds.Data = xml;
xds.DataBind();
xds.EnableCaching = false;
gv1.DataSource = xds;
createButton(gv1, up1);
gv1.RowCommand += new GridViewCommandEventHandler(CustomersGridView_RowCommand);
gv1.DataBind();
up1.ChildrenAsTriggers = true;
up1.ContentTemplateContainer.Controls.Add(button1);
up1.ContentTemplateContainer.Controls.Add(label1);
up1.ContentTemplateContainer.Controls.Add(gv1);
Page.Form.Controls.Add(up1);
}
protected void Page_Load(object sender, EventArgs e)
{
}
public void CustomersGridView_RowCommand(Object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "buttonClicked")
{
int index = Convert.ToInt32(e.CommandArgument);
}
}
void createButton(GridView g)
{
ButtonField tea = new ButtonField();
tea.ButtonType = ButtonType.Image;
tea.ImageUrl = "~/checkdailyinventory.bmp";
tea.CommandName = "buttonClicked";
tea.HeaderText = "space";
g.Columns.Add(tea);
}
protected void Button_Click(object sender, EventArgs e)
{
((Label)Page.FindControl("Label1")).Text = "Panel refreshed at " +
DateTime.Now.ToString();
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title>UpdatePanel Constructor Example</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Button ID="Button2" runat="server" Text="Button" />
<asp:ScriptManager ID="ScriptManager1" runat="server" />
</div>
</form>
</body>
</html>
那么,如果单击GridView,如何以编程方式将带有按钮的网格视图添加到UpdatePanel 而不会导致完整的PostBack()?
编辑:我尝试过的其他事情
void gv1_RowDataBound(object sender, GridViewRowEventArgs e)
{
AsyncPostBackTrigger t = new AsyncPostBackTrigger();
t.ControlID = e.Row.Cells[0].ClientID;
t.EventName = "blah";
up1.Triggers.Add(t);
}
【问题讨论】:
-
您是否尝试过在页面中包含占位符并将更新面板添加到该占位符,而不是 Page.Controls?
-
刚刚试过了,没用。
PlaceHolder1.Controls.Clear(); PlaceHolder1.Controls.Add(up1); //Page.Form.Controls.Add(up1); -
尝试将 UpdateMode 设置为 UpdatePanelUpdateMode.Conditional。我正在 MSDN 上阅读一些关于这个问题的主题。一个人对 javascript 有问题,这不是你的情况。另一个可以使它与此 UpdateMode 设置一起使用。
-
将更新模式设置为条件也不起作用。我想我必须将每个按钮添加到触发器中,但我不能 100% 确定如何正确执行。
-
AsyncPostBackTrigger 触发器 = new AsyncPostBackTrigger(); trigger.ControlID = "按钮 ID"; up1.Triggers.Add(触发器);
标签: c# asp.net gridview updatepanel