Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在AJAX updatepanel内的asp.net gridview中分页不起作用_Asp.net_Vb.net_Gridview_Updatepanel_Paging - Fatal编程技术网

在AJAX updatepanel内的asp.net gridview中分页不起作用

在AJAX updatepanel内的asp.net gridview中分页不起作用,asp.net,vb.net,gridview,updatepanel,paging,Asp.net,Vb.net,Gridview,Updatepanel,Paging,我有一个asp.net gridview,它最初绑定到一个sqldatasource控件,但是当用户按下一个外部按钮时,它会获取datatable的内容,而不是sqldatasource控件的内容。因此,我必须在gridview的PageIndexChanging事件中编写代码以允许分页。我的代码如下: Protected Sub gvEvents_PageIndexChanging(ByVal sender As Object, ByVal e As System.Web.UI.WebCont

我有一个asp.net gridview,它最初绑定到一个sqldatasource控件,但是当用户按下一个外部按钮时,它会获取datatable的内容,而不是sqldatasource控件的内容。因此,我必须在gridview的PageIndexChanging事件中编写代码以允许分页。我的代码如下:

Protected Sub gvEvents_PageIndexChanging(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewPageEventArgs) Handles gvEvents.PageIndexChanging

gvEvents.PageIndex = e.NewPageIndex

gvEvents.DataBind()
直到我添加了一个AJAX更新面板,这样整个页面就不会在每次分页时都回发,分页就停止了。我调试了它,发现它实际上在调用PageIndexchange事件,但什么也没有发生

我在网上搜索,发现有几个人有同样的问题,但他们的解决方案对我不起作用。该站点上有一个问题通过以下方式解决:

在PageIndexchange事件中,将数据绑定到网格,确保再次从数据库中获取数据

我不知道那是什么意思;我的数据正在绑定,如上所示。我将“启用分页”设置为true,将EnableSortingAndPagingCallbacks设置为false

如果有人能帮助我,我将不胜感激。我正在为下面的updatepanel添加标记。非常感谢你

    <asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional">
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="ibtnSearch" />           
        </Triggers>

        <ContentTemplate>

            <asp:GridView ID="gvEvents" runat="server"  DataKeyNames = "intID"
                AutoGenerateColumns="False" AllowPaging="True" GridLines="None" CellPadding="10" 
                ForeColor="#333333" PageSize="6" DataSourceID="defaultDS" >
                <RowStyle BackColor="#FFFBD6" ForeColor="#333333" />

                <Columns>
                    <asp:TemplateField HeaderText="Date">
                        <ItemTemplate>
                        <!-- put code block inside label? To set the formatter to include year if 
                        it's next year? -->
                        <asp:Label ID="Label1" runat="server" 
                            Text = '<%# RepeatingMethods.DetermineOngoing(CType(Eval("dtmEventStartDate"), DateTime) , CType(Eval("dtmEventEndDate"), DateTime))%>'> </asp:Label>

                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField>
                  <ItemTemplate>
                  <asp:Label ID="Label4" runat="server" Text='<%# Eval("chvAgeRange")  %>'> </asp:Label> <br />
                   <asp:Label ID="Label3" runat="server" Text= '<%# Eval("chvState")  %>'> </asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:HyperLinkField DataNavigateUrlFields="intId" 
                    DataNavigateUrlFormatString="EventDetail.aspx?intId={0}" 
                    DataTextField="chvEventName" />

                    <asp:BoundField DataField="chvBriefDescription" HeaderText="Description" 
                        SortExpression="chvBriefDescription" />


            </Columns>
                     <FooterStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />
                     <PagerStyle BackColor="#FFCC66" ForeColor="#333333" HorizontalAlign="Center" />
                     <SelectedRowStyle BackColor="#FFCC66" Font-Bold="True" ForeColor="Navy" />
                     <HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />
                     <AlternatingRowStyle BackColor="White" />


<FooterStyle BackColor="#990000" Font-Bold="True" ForeColor="White"></FooterStyle>

<PagerStyle HorizontalAlign="Center" BackColor="#FFCC66" ForeColor="#333333"></PagerStyle>

<SelectedRowStyle BackColor="#FFCC66" Font-Bold="True" ForeColor="Navy"></SelectedRowStyle>

<HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="White"></HeaderStyle>

<AlternatingRowStyle BackColor="White"></AlternatingRowStyle>
    </asp:GridView>



                <asp:Label ID="lblError" runat="server"></asp:Label>

    <br />
    </ContentTemplate>
    </asp:UpdatePanel>



在PageIndexchange事件中,将数据绑定到网格,确保再次从数据库中获取数据 我不知道那是什么意思;我的数据正在绑定,如上所示

这意味着您需要在代码隐藏页中再次获取数据。您在design/html页面中使用的是SQLdatasource,因此需要删除它,并使用SQL连接、SQL命令等获取数据,然后将其设置为控件的数据源

如下所示:

您的代码应该如下所示

Protected Sub Page_Load(...)
   gvEvents.PageIndex = 0
   LoadData();// loads initial data
end sub

private sub LoadData()
 '' do your SQL Conn and Command here
 '' set your datasource of gridview here
end sub

Protected Sub gvEvents_PageIndexChanging(...) Handles gvEvents.PageIndexChanging
  gvEvents.PageIndex = e.NewPageIndex
  LoadData()
  gvEvents.DataBind()
end sub

与UpdatePanel控件不兼容的控件

以下ASP.NET控件与部分页面更新不兼容,因此在UpdatePanel控件中不受支持:

GridViewDetailsView在其启用排序和分页回调属性设置为true时进行控制。默认值为false


只需在databind()之后更新AJAX面板即可

假设更新面板的id为AJAXPanel

Protected Sub gvEvents_PageIndexChanging(...) Handles gvEvents.PageIndexChanging             
     gvEvents.PageIndex = e.NewPageIndex
     LoadData()
     gvEvents.DataBind()
     // The below line refreshes the update panel..  
     AJAXPanel.Update()
end sub

对于任何偶然发现这个问题的人来说,我在今天遇到了它,这篇文章是误导性的(至少在我的场景中是这样)。对我来说,我只需添加一个PageIndexchange事件作为datagrid的updatepanel触发器的触发器,就解决了我的问题。

我甚至看不到您的数据源代码。以下是部分内容(这是一个很长的子项,我无法将其全部放入)searchConnection.Open()searchCommand=New SqlCommand(searchString,searchConnection)searchAdapter=New SqlDataAdapter(searchCommand)searchDatatable=New DataTable searchAdapter.Fill(searchDatatable)如果searchDatatable.Rows.Count>0,则gvEvents.DataSourceID=Nothing gvEvents.DataSource=searchDatatable gvEvents.DataBind()如果我没有说清楚,我很抱歉。我正在使用SQL连接和命令来获取数据—gridview的数据源是一个datatable。我的问题是,在我将自定义分页代码放入更新面板之前,它工作得很好,而现在却没有。为什么我会突然需要从数据库中重新获取数据?因为数据库中的数据不会持久存储在gridview/页面中。当您在更新面板中进行回发时,您需要再次获取记录,以便将其加载到gridview,因为此时数据源中没有数据。非常感谢。你是说每次我想获取一个新页面时,我都需要返回数据库并重新运行所有select命令?为什么我不在更新面板之外做呢?是的,我就是这么说的。我认为这是因为当您设置数据源并呈现它时,它只将您看到的项目(当前页面)保存到视图状态,所以在其他回发中,它只呈现控件视图状态中的内容。但是,如果您更改页面索引,那么它需要获取任何页面索引上的项目作为新索引,以便它可以将新的项目列表存储到视图状态。非常感谢。我按照你的建议做了,而且很有效!我真的很感谢你的帮助。