使用VB.Net对标准.net 2.0 Gridview进行分页问题

时间:2009-04-03 10:05:59

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

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

所有这一切都正常,但我遇到分页问题...

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

任何想法我做错了什么?或者我有什么需要做的,我错过了吗?

目前使用的代码;

...的GridView

<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>

...的XmlDataSource

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

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

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字符串。

3 个答案:

答案 0 :(得分:1)

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

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

在这种情况下,它会在回发后显示为空,您将获得例外。可能是其他东西,但话说再说一遍,没有代码...

<强>更新

由于您添加了更多信息......

您必须在Page_Load上面有类似代码的内容。既然你没有在这里提供,我认为你这样做。如果不这样做,则每次加载都会得到空引用异常。

考虑到这一点,您可以在某些按钮点击上分配数据,但不能在PageIndexChanging上分配数据。

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

从我看到的,要么每次都在Page_Load 上分配数据属性,要么在所有后续事件中进行分配,即在页面更改,排序等方面进行。< / p>

顺便说一句,在声明性地分配XmlDataSource时,你不必调用DataBind。

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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