【问题标题】:Use UpdatePanel with GridView将 UpdatePanel 与 GridView 一起使用
【发布时间】:2011-04-04 18:32:00
【问题描述】:

我有一个带有侧边栏的母版页,其中包含用于站点导航的手风琴控件。在我的一个子窗体上,我在 UpdatePanel 中添加了一个 GridView。该用户通过单击按钮启动作业。此作业写入数据库表,我希望通过 Grid 视图查看此更新。我添加了一个带有执行 GridView.DataBind 的 ontick 事件的计时器控件。

GridView 数据在每个刻度(2 秒)上刷新,问题是整个页面(包括母版页)收到回发 - 导致我的手风琴控件的选定面板被重置。

我以前没有使用过 UpdatePanel 控件,但我希望这可以防止整页回发。我想我配置的东西不正确。我在下面粘贴了包含 Panel 和 GridView 的 div。谁能告诉我我做错了什么?

谢谢

罗伯。

<div id="statusGrid">
    <u>Job Status</u>
    <br />
    <asp:UpdatePanel ID="StatusUpdatePanel" runat="server" UpdateMode="Conditional">
        <ContentTemplate>
            <asp:GridView ID="grdJobStatus" runat="server" DataSourceId="sqlJobStatus">
                <FooterStyle BackColor="#B5C7DE" ForeColor="#4A3C8C" />
                <HeaderStyle BackColor="#4A3C8C" Font-Bold="True" ForeColor="#F7F7F7" />
                <PagerStyle BackColor="#E7E7FF" ForeColor="#4A3C8C" HorizontalAlign="Right" />
                <RowStyle BackColor="#E7E7FF" ForeColor="#4A3C8C" />
                <SelectedRowStyle BackColor="#738A9C" Font-Bold="True" ForeColor="#F7F7F7" />
            </asp:GridView>
            <asp:SqlDataSource ID="sqlJobStatus" runat="server" ConnectionString="<%$ ConnectionStrings:ARC_CTRLConnectionString %>">
            </asp:SqlDataSource>
        </ContentTemplate>
    </asp:UpdatePanel>


    <asp:Label ID="lblBODIJobMsg" runat="server"></asp:Label>
</div>

【问题讨论】:

标签: ajax gridview updatepanel


【解决方案1】:

Page_Load 事件作为 AJAX 回发的一部分触发。如果这有任何附带影响的更改,则将重新加载整个页面。

【讨论】:

    【解决方案2】:

    只有 UpdatePanel 中的元素会在部分回发时更新 - 您是否希望 lblBODIJobMsg 更新?

    另请参阅 @ck 关于您代码隐藏的其他更改的内容。

    您可能还想检查页面上的其他 javascript 和 ASP.Net 元素。由于 `UpdatePanel 中的DropDownList,我曾遇到过整个页面会回发的情况。

    你的计时器在哪里?根据您如何实现它,它可能会发布整个页面。也许它也需要在UpdatePanel 内?

    【讨论】:

    • 是的,问题是计时器需要在更新面板内。非常感谢,罗伯。
    【解决方案3】:

    在您的 page_load 中,您需要检查 IsPostBack。像这样的

    protected void Page_Load(object sender, EventArgs e)
    {
       if(IsPostBack) return;
       //do first-time load stuff here
    }
    

    另外,启动工作的按钮在哪里?它也应该在您的更新面板中。

    【讨论】:

      【解决方案4】:

      计时器不必在更新面板中,它也可以设置为更新面板的触发器,即使它在外面。 如:

      <Triggers>
            <asp:AsyncPostBackTrigger ControlID="Timer1" EventName="Tick" />
      
      </Triggers>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-07-16
        • 1970-01-01
        • 1970-01-01
        • 2011-08-15
        • 2013-10-02
        • 1970-01-01
        • 2012-03-04
        相关资源
        最近更新 更多