【问题标题】:rowcommand in dynamically created gridviews动态创建的网格视图中的行命令
【发布时间】:2012-04-03 12:33:04
【问题描述】:

我遇到了严重的 gridview 问题。 我动态创建的 gridview 中的 rowcommand 没有触发。

            Controls_ucOffice userControl = (Controls_ucOffice)LoadControl("~/Controls/ucOffice.ascx");
            userControl.ID = *Unique ID*

            GridView gvPhones =(GridView) userControl.FindControl("myGridView");
            gvPhones.DataSource = cPhoneList;
            gvPhones.DataBind();

            placeholder1.Controls.Add(userControl);

我正在制作几个这样的控件,它们在网格视图中看起来都很好,并且数据正确。 这是通过单击按钮而不是在 page_load 上完成的。

我知道它们会在回发时消失,所以我将它们放在更新面板中,以避免丢失网格视图(填充它们需要相当长的时间)

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
    <asp:GridView runat="server" ID="gvPhones" AutoGenerateColumns="false" OnRowDataBound="gvPhones_RowDataBound"
            OnRowCommand="gvPhones_RowCommand">
</ContentTemplate>
<Triggers>
    <asp:AsyncPostBackTrigger ControlID="gvPhones" EventName="RowCommand" />
</Triggers>

将它们放入更新面板后,第一次单击没有任何反应,第二次单击使所有网格视图消失(因为有一个回发)

永远不会到达下面的rowcommand方法中的断点

protected void gvPhones_RowCommand(object sender, GridViewCommandEventArgs e)
{
    //do stuff
}

【问题讨论】:

  • 删除更新面板后会发生什么?
  • 网格视图在单击后消失,我认为这是因为回发。
  • 我不确定我是否理解,为什么它必须在没有更新面板的情况下工作?
  • 如果没有更新面板就无法工作,那么使用它们的机会就很少。必须在每次回发时构建控制树。这是动态控件的主要问题,每次都要构建树。
  • 我明白了,我已经开始使用一个解决方案,我在 gridview 中使用超链接,然后使用 url 参数调用他的站点。它有效,但它不是很优雅 imo。

标签: c# asp.net gridview updatepanel postback


【解决方案1】:

如果您在页面加载中绑定网格,如下所示

if(!IsPostBack)
{
    BindGrid();
}

然后从 !IsPostBack 中获取 BindGrid()。意味着如果您在运行时创建网格,则需要在每次回发时重新绑定()网格。

【讨论】:

    猜你喜欢
    • 2013-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多