Ошибка: «Емкость меньше текущего размера» с элементом управления ASP.NET DataPager - PullRequest
3 голосов
/ 30 января 2012

У меня есть ASP.NET ListView с DataPager согласно этому коду:

        <asp:ListView ID="TicketsPerPersonListView" runat="server" DataSourceID="ObjectDataSource1">
        <EmptyDataTemplate>
            -- No Records Found --
        </EmptyDataTemplate>
        <ItemTemplate>
            <tr style="display: table-row;">
                <td>
                    <a href="viewticket.aspx?id=<%#Eval("ticket_id")%>">#<%# Eval("TicketID")%>-
                        <%# Eval("ShortDesc")%></a>
                </td>
                <td>
                    <%# Eval("StatusName")%>
                </td>
                <td style="text-align: right; padding-right: 60px;">
                    <%# Eval("StatusDescription")%>
                </td>
                <td style="text-align: right; padding-right: 60px;">
                    <%# Eval("TimeLastAction")%>
                </td>
            </tr>
        </ItemTemplate>
        <LayoutTemplate>
            <table>
                <thead>
                    <tr>
                        <th>
                            Title
                        </th>
                        <th style="text-align: right; padding-right: 60px;">
                            Current Status
                        </th>
                        <th style="text-align: right; padding-right: 60px;">
                            Latest Action
                        </th>
                        <th style="text-align: right; padding-right: 60px;">
                            Last Viewed
                        </th>
                    </tr>
                </thead>
                <tfoot>
                    <tr>
                        <td colspan="5">
                            <div class="pagination">
                                <asp:DataPager ID="TicketsPerPersonDataPager" runat="server" PagedControlID="TicketsPerPersonListView"
                                    PageSize="10">
                                    <Fields>
                                        <asp:NextPreviousPagerField FirstPageText="&lt;&lt;" ShowFirstPageButton="True" ShowNextPageButton="False"
                                            ShowPreviousPageButton="False" />
                                        <asp:NumericPagerField CurrentPageLabelCssClass="graybutton pagelink active" NumericButtonCssClass="graybutton pagelink" />
                                        <asp:NextPreviousPagerField LastPageText="&gt;&gt;" ShowLastPageButton="True" ShowNextPageButton="False"
                                            ShowPreviousPageButton="False" />
                                    </Fields>
                                </asp:DataPager>
                            </div>
                        </td>
                    </tr>
                </tfoot>
                <tbody>
                    <asp:PlaceHolder runat="server" ID="itemPlaceholder"></asp:PlaceHolder>
                    <tr style="display: table-row;">
                    </tr>
                </tbody>
            </table>
        </LayoutTemplate>
    </asp:ListView>
    <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" EnablePaging="True" SelectMethod="FindByUserID"
        TypeName="Xyratex.XCS.Services.TicketService" StartRowIndexParameterName="startRowIndex"
        MaximumRowsParameterName="maximumRows" SelectCountMethod="CountByUserID">
        <SelectParameters>
            <asp:Parameter Name="userID" DbType="Int64" DefaultValue="79" />
            <asp:ControlParameter Name="custID" ControlID="DDCaller" ConvertEmptyStringToNull="True"
                DefaultValue="" />
            <asp:ControlParameter Name="company" ControlID="DDCompany" ConvertEmptyStringToNull="True"
                DefaultValue="" />
            <asp:ControlParameter Name="owner" ControlID="DDOwner" ConvertEmptyStringToNull="True"
                DefaultValue="" />
            <asp:ControlParameter Name="action" ControlID="DDAction" ConvertEmptyStringToNull="True"
                DefaultValue="" />
            <asp:ControlParameter Name="status" ControlID="DDCurrentStatus" ConvertEmptyStringToNull="True"
                DefaultValue="" />
        </SelectParameters>
    </asp:ObjectDataSource>

Код VB.NET, который обеспечивает ObjectDataSource данными, таким образом:

    ''' <summary>
''' Finds all the <see cref="Xyratex.XCS.Model.Tickets.Ticket" /> objects belonging to the specified user ID
''' </summary>
''' <param name="userID">The id of the user to find tickets for</param>
''' <param name="startRowIndex">The starting index of the portion of the recordset</param>
''' <param name="maximumRows">The maximum amount of rows to return</param>
''' <param name="custID">The id of the customer to find tickets for</param>
''' <param name="company">The company name to find tickets for</param>
''' <param name="owner">The owner to find tickets for</param>
''' <param name="action">The action to find tickets for</param>
''' <param name="status">The status of tickets to find.</param>
''' <returns>A <see cref="System.Collections.Generic.IList(Of Xyratex.XCS.Model.Tickets.Ticket)" /> object</returns>
''' <remarks>XY01\rpenfold 30 January 2012</remarks>
Public Function FindByUserID(ByVal userID As Long,
                             ByVal startRowIndex As Long,
                             ByVal maximumRows As Long,
                             ByVal custID As Long?,
                             ByVal company As String,
                             ByVal owner As Integer?,
                             ByVal action As Char?,
                             ByVal status As Long?) As List(Of LightWeightTicket) Implements ITicketRepository.FindByUserID
    'Start a new session and run the query
    Using session As NHibernate.ISession = SessionFactory.GetNewSession()
        Dim query As NHibernate.IQuery = session.GetNamedQuery("Select_AllTickets_ByUserID_RyanTest")
        query.SetInt64("user_id", userID)
        Select Case custID.HasValue
            Case True
                query.SetInt64("cust_id", custID.Value)
            Case False
                query.SetString("cust_id", Nothing) 'SetString makes it NULL
        End Select
        Select Case String.IsNullOrWhiteSpace(company)
            Case True
                query.SetString("company", Nothing)
            Case False
                query.SetString("company", company) 'SetString makes it NULL
        End Select
        Select Case owner.HasValue
            Case True
                query.SetInt32("owner", owner.Value)
            Case False
                query.SetString("owner", Nothing) 'SetString makes it NULL
        End Select
        Select Case action.HasValue
            Case True
                query.SetCharacter("action", action.Value)
            Case False
                query.SetString("action", Nothing) 'SetString makes it NULL
        End Select
        Select Case status.HasValue
            Case True
                query.SetInt64("status", status.Value)
            Case False
                query.SetString("status", Nothing) 'SetString makes it NULL
        End Select
        query.SetInt64("startRowIndex", startRowIndex)
        query.SetInt64("maximumRows", maximumRows)
        Return New List(Of LightWeightTicket)(query.List(Of LightWeightTicket)())
    End Using
End Function

Когда я загружаю страницу, я получаю сообщение об ошибке «Емкость меньше текущего размера».Трассировка стека выполняется следующим образом:

[ArgumentOutOfRangeException: capacity was less than the current size.

Имя параметра: значение] System.Collections.ArrayList.set_Capacity (значение Int32) +9360651 System.Web.UI.WebControls.ListView.CreateChildControls (IEnumerable dataSource, Boolean)привязка данных) +712 System.Web.UI.WebControls.ListView.PerformDataBinding (IEnumerable data) +35 System.Web.UI.WebControls.DataBoundControl.OnDataSourceViewSelectCallback (IEnumerable data) +128 аргументы System.Web.UI.DataSourcementsSelectSelectSourceSelectViewSelectSSelectView.SelectS., Обратный вызов DataSourceViewSelectCallback) +33 System.Web.UI.WebControls.DataBoundControl.PerformSelect () +143 System.Web.UI.WebControls.ListView.PerformSelect () +113 System.Web.UI.WebControls.BaseDataBoundControl.D74 System.Web.UI.WebControls.BaseDataBoundControl.EnsureDataBound () +66 System.Web.UI.WebControls.ListView.CreateChildControls () +55 System.Web.UI.Control.EnsureChildControls () +102 System.Web.Control.PreRenderRecursiveInternal () +42 System.Web.UI.Control.PreRenderRecursiveInternal () +175System.Web.UI.Control.PreRenderRecursiveInternal () +175 System.Web.UI.Page.ProcessRequestMain (логическое значение includeStagesBeforeAsyncPoint, логическое значение includeStagesAfterAsyncPoint) + 2496

Кто-нибудь знает, что с этим делать?

Заранее спасибо,

Райан

1 Ответ

3 голосов
/ 31 января 2012

Я решил это!

Метод count возвращал System.Int64.Когда это было исправлено в System.Int32, оно заработало!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...