我正在使用一个标准的.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字符串。
答案 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中设置它。