我使用转发器进行分页,并尝试更改当前页面的颜色。我得到错误“对象引用未设置为对象的实例”。我无法调试我的代码有什么问题,很抱歉因为我是asp.net和vb的新手。请提前帮助并谢谢。
<div id="pages" class="pages-top">
<asp:Repeater ID="rptPages" runat="server">
<HeaderTemplate>
<div>Page </div>
</HeaderTemplate>
<ItemTemplate>
<a >
<asp:LinkButton ID="btnPage" runat="server"
CommandName="Page" CommandArgument="<%# Container.DataItem%>">
 <%# Container.DataItem%></asp:LinkButton>
</a>
</ItemTemplate>
</asp:Repeater>
</div>
Public Property PageNumber() As Integer
Get
If ViewState("PageNumber") IsNot Nothing Then
Return Convert.ToInt32(ViewState("PageNumber"))
Else
Return 0
End If
End Get
Set(ByVal value As Integer)
ViewState("PageNumber") = value
End Set
End Property
Public Sub LoadData()
Dim pgitems As New PagedDataSource()
Dim dv As New DataView(OutOfStockDt)
......
pgitems.DataSource = dv
pgitems.AllowPaging = True
pgitems.PageSize = intPageItems
pgitems.CurrentPageIndex = PageNumber
.......
rptPages.DataSource = pages
rptPages.DataBind()
........
rptOutOfStock.DataSource = pgitems
rptOutOfStock.DataBind()
End Sub
Protected Sub rptPages_ItemDataBound(sender As Object, e As RepeaterItemEventArgs) Handles rptPages.ItemDataBound
Dim lnkPage As LinkButton
lnkPage = e.Item.FindControl("btnPage")
--> im getting the error from the code below (if condition)
**If lnkPage.CommandArgument.ToString = PageNumber.ToString** Then
lnkPage.Enabled = False
lnkPage.ForeColor = Drawing.Color.Black
End If
End Sub
答案 0 :(得分:1)
我通过在找到控件之前首先验证ListItemType来修复错误。我只是网络开发的新手,我的想法可能是我没有清楚地指出我正在寻找的控件的位置,这就是为什么返回null / nothing值的原因。这里是更新的代码,
If e.Item.ItemType = ListItemType.Item Then
lnkPage = e.Item.FindControl("btnPage")
If lnkPage.CommandArgument.ToString() = PageNumber.ToString() Then
lnkPage.Enabled = False
lnkPage.ForeColor = Drawing.Color.Black
End If
End If
答案 1 :(得分:0)
当您尝试使用仍为null / Nothing的变量时,这是您得到的错误。
对FindControl()
的调用失败,lnkPage
变量仍为null / Nothing,或者成功,CommandArgument
属性为null / Nothing。您可以在此处设置断点以查看哪个断点。