【问题标题】:Paging Problems With Standard .net 2.0 Gridview using VB.Net使用 VB.Net 的标准 .net 2.0 Gridview 的分页问题
【发布时间】:2010-10-17 07:59:30
【问题描述】:

我正在使用一个标准的 .net 2.0 Gridview,它使用 XMLDatasource 来填充网格。 XMLDatasource 的 Data 属性是动态设置的,它允许 gridview 根据输入进行更改。

这一切都很好,但是我在分页时遇到问题......

我已将 AllowPaging 属性设置为“true”,并将 PageSize 属性设置为“10”。 GridView 第一次在底部显示前 10 条记录和作为超链接的页数时填充良好,但是当我尝试单击任何页码以查看它们时,会弹出一个消息框,提示“未设置对象引用到一个对象的实例”

任何想法我做错了什么?还是有什么我错过的事情需要做??

当前正在使用的代码;

网格视图...

<asp:GridView ID="GridView1" 
      Runat="server" 
      DataSourceID="XmlDataSource1" 
      AutoGenerateColumns="False" 
      AllowPaging="True"
      style="width:100%; height:100%;"  
      EnableViewState="False">
<SelectedRowStyle BackColor="Red" />
<Columns>
   <asp:BoundField DataField="TYPE" HeaderText="TYPE" SortExpression="TYPE" />
   <asp:BoundField DataField="DESCRIPTION" HeaderText="DESCRIPTION" SortExpression="DESCRIPTION" />
</Columns>
</asp:GridView>

XML数据源...

<asp:XmlDataSource ID="XmlDataSource1" runat="server" TransformFile="~/XML/grid2.xslt" EnableCaching="False">
</asp:XmlDataSource>

设置 XMLDatasource 的 Data 属性的 vb.net 代码...

Private Sub btnTest_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnTest.Click

  XmlDataSource1.Data = _testLib.GetGridXML(_Num)
  GridView1.DataBind()
End Sub

其中 _testLib.GetGridXML 是一个根据传入的 _Num 返回 XML 字符串的函数。

【问题讨论】:

  • 要么始终在 Page_Load 上分配您的数据,要么在每个次要事件上分配您的数据,即网格排序、页面索引更改等(任何改变网格状态的事情)。查看我的更新答案...

标签: asp.net vb.net gridview .net-2.0 paging


【解决方案1】:

没有看到你的代码很难说......我推测你有条件地分配数据,即:

If Not IsPostBack Then
   MyXMLDataSource.Data = "...some xml..."
End If

在这种情况下,回发时它将为空,并且您会遇到异常。可能是别的东西,但话又说回来,没有代码......

更新

既然您添加了更多信息...

您必须在 Page_Load 上有类似上述代码的内容。既然你没有在这里提供它,我想你会这样做。如果不这样做,每次加载都会出现空引用异常。

考虑到这一点,您在某些按钮单击时分配数据,而不是在 PageIndexChanging 上分配数据。

您单击按钮,页面加载,分配数据,网格显示它。然后你点击网格的下一个链接,页面再次加载,PageIndexChanging 被触发,你的点击事件没有——那么分配在哪里?

据我所见,每次都在 Page_Load 上分配 Data 属性,或者在所有后续事件中分配 Data 属性,即页面更改、排序等。

顺便说一句,您不必在以声明方式分配 XmlDataSource 时调用 DataBind。

【讨论】:

  • 谢谢!这确实有意义并且有效:) 有一件事要提一下,如果在 Grid 上启用了 Viewstate,如果在 PreRender 事件中设置 Data 属性而不是页面加载,它会更好地工作。但是,如果 ViewState 被禁用,如果在 PageLoad 事件中设置了 Data 属性,它就可以正常工作!
【解决方案2】:

如果您对 PreRender 事件进行数据绑定,它应该可以工作

由于 XML 数据源是动态设置的,如果您在 PageLoad 上设置它,所有页面元素在此阶段可能不存在。

【讨论】:

    【解决方案3】:

    您是否正在实施 OnPageChanging 事件?通常你需要实现它并使用 Event Argument 中的 e.NewPageIndex 属性在你的 gridview 中设置它。

    【讨论】:

    • 如果数据源是声明式分配的,你不需要这样做,我认为是这种情况......
    • 顺便说一句,如果 OnPageChanging 没有实现,它会给出一个不同的错误,特别说明它被触发并且没有被处理。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-13
    • 2013-02-12
    • 2011-10-22
    • 1970-01-01
    相关资源
    最近更新 更多