将UpdatePanel与GridView一起使用

时间:2010-08-27 11:52:50

标签: ajax gridview updatepanel

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

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>

4 个答案:

答案 0 :(得分:1)

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

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

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:0)

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

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

</Triggers>