1

我正在使用一个标准的 .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 字符串。

4

3 回答 3

1

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

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

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

更新

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

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

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

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

据我所知,要么每次都在 Page_Load 上分配 Data 属性,要么在所有后续事件中都这样做,即在页面更改、排序等时。

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

于 2009-04-03T17:42:05.983 回答
1

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

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

于 2009-04-03T19:43:13.257 回答
0

您是否正在实施 OnPageChanging 事件?通常您需要实现它并使用事件参数中的 e.NewPageIndex 属性在您的网格视图中设置它。

于 2009-04-03T18:01:23.253 回答