ASP:Repeater - 分页错误(对象引用未设置为对象的实例)

时间:2014-05-08 16:49:56

标签: asp.net vb.net pagination repeater commandargument

我使用转发器进行分页,并尝试更改当前页面的颜色。我得到错误“对象引用未设置为对象的实例”。我无法调试我的代码有什么问题,很抱歉因为我是asp.net和vb的新手。请提前帮助并谢谢。

<div id="pages" class="pages-top">
    <asp:Repeater ID="rptPages" runat="server">
        <HeaderTemplate>
            <div>Page&nbsp</div>
        </HeaderTemplate>
        <ItemTemplate>
            <a >
                <asp:LinkButton ID="btnPage" runat="server"
                    CommandName="Page" CommandArgument="<%# Container.DataItem%>">
                    &nbsp<%# 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

2 个答案:

答案 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。您可以在此处设置断点以查看哪个断点。