我正在使用标准的 .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 字符串。
如果没有看到你的代码,很难说......我推测你有条件地分配数据,即:
If Not IsPostBack Then
MyXMLDataSource.Data = "...some xml..."
End If
在这种情况下,回发时它将为空,并且您会得到例外。可能是别的东西,但话又说回来,没有代码......
更新
既然您添加了更多信息...
您必须在 Page_Load 上有类似上面的代码。既然您没有在这里提供,我想您已经提供了。如果不这样做,每次加载时都会出现空引用异常。
考虑到这一点,您可以在单击某些按钮时分配数据,而不是在 PageIndexChanging 上分配数据。
单击按钮,页面加载,分配数据,网格显示它。然后,您单击网格的下一个链接,页面再次加载,PageIndexChanging 被触发,但您的单击事件没有 - 那么分配在哪里?
据我所知,要么在 Page_Load 上分配 Data 属性每次,要么在所有后续事件中执行此操作,即页面更改、排序等。
顺便说一句,以声明方式分配 XmlDataSource 时不必调用 DataBind。
如果您在 PreRender 事件上进行数据绑定,它应该可以工作
由于 XML 数据源是动态设置的,如果您在 PageLoad 上设置它,则在此阶段所有页面元素可能不存在。
您是否正在实现 OnPageChanging 事件?通常,您需要实现它并使用事件参数中的 e.NewPageIndex 属性在 gridview 中设置它。