如何在不刷新整个页面的情况下将gridview的单列自动更新?

时间:2013-06-22 17:57:48

标签: asp.net ajax gridview

我有一个包含多列的gridview,但只有一列应该动态更改。每行都有一个“status”值,我需要进行数据库调用才能更新。我已经编写了一个函数来执行该调用,但是我为更新它而编写的当前方法刷新了整个页面。这是突兀的,因为刷新会删除状态(页面其他区域中的选定值,滚动位置等)。

以下是我试图设置的代码:

<div class = "my_gridview">
    <asp:Timer ID = "timer_1" OnTick = "timer_1Tick" runat = "server" Interval = "25" />
        <asp:UpdatePanel ID = "update_panel" UpdateMode = "Conditional" runat = "server">
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID = "timer_1" EventName = "Tick" />
        </Triggers>
        <ContentTemplate>
            <asp:GridView ID="my_gridview" runat="server" AutoGenerateColumns = "False" 
                GridLines="None" Width="100%" AllowSorting="True" 
                CssClass="table table-bordered x-condensed cameraDetails" OnRowDataBound = "my_list_RowDataBound"
                EmptyDataText = "There are no generated heatmaps">
                <Columns>
                    <asp:TemplateField meta:resourceKey = "StringSourceID">
                    <HeaderTemplate>
                        <asp:Label ID = "srcTitleLbl" runat="server" Text = "Source" />
                    </HeaderTemplate>
                        <ItemTemplate>
                            <asp:Label ID = "srcLbl" runat="server" CssClass="LinkBtn_Type" meta:resourceKey="srcLblResource" />
                        </ItemTemplate>
                    </asp:TemplateField>

                    <asp:TemplateField meta:resourceKey = "StringStatus">
                    <HeaderTemplate>
                        <asp:Label ID = "statusTitleLbl" runat="server" Text = "Status" />
                    </HeaderTemplate>
                        <ItemTemplate>
                            <asp:Label ID = "statusLbl" runat="server" CssClass="LinkBtn_Type" meta:resourceKey="statusLblResource" />
                        </ItemTemplate>
                    </asp:TemplateField>

                </Columns>
            </asp:GridView>
            </ContentTemplate>
        </asp:UpdatePanel>
    </div>

如果不刷新整个页面,怎么办呢?

1 个答案:

答案 0 :(得分:2)

UpdatePanels执行部分回发,但仍然会经历页面生命周期,这会导致删除状态。您可以调查项目选择(复选框,行等)之类的持久性内容,但您很可能会花费大量时间来创建它并保持它将是一场噩梦。

要真正避免页面生命周期并实现您所描述的用户体验,请使用客户端解决方案,如纯JavaScript,KnockoutJS,Backbone或AngularJS。这些方法会在向服务器发送/检索数据时单独保留页面状态,然后可能会更新页面的部分内容。