SelectCountMethod error - looking for parameters?

Discussion in 'ASP .Net' started by miky, Jun 2, 2006.

  1. miky

    miky Guest

    Hi,
    I'm trying to get custom gridview paging working and I'm getting the
    following error:

    "ObjectDataSource 'ObjectDataSource1' could not find a non-generic
    method 'count' that has parameters: p_TableName, p_OrderBy, p_MaxRows,
    p_PageNum, p_StartRowIndex."

    I have a gridview associated to an ObjectDataSource and the
    ObjectDataSource is declared in the aspx file as follows:

    <asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
    TypeName="LookupData"
    SelectCountMethod="count" SelectMethod="selectMFPSData"
    MaximumRowsParameterName="p_MaxRows"
    SortParameterName="p_OrderBy" EnablePaging="True"
    StartRowIndexParameterName="p_StartRowIndex">
    <SelectParameters>
    <asp:ControlParameter ControlID="lstMFPSTABLES"
    Name="p_TableName" PropertyName="SelectedValue"
    Type="String" />
    <asp:parameter Name="p_OrderBy" Type="String" />
    <asp:parameter Name="p_MaxRows" Type="Int32" />
    <asp:parameter Name="p_PageNum" Type="Int32" />
    <asp:parameter Name="p_StartRowIndex" Type="Int32" />
    </SelectParameters>
    </asp:ObjectDataSource>

    The thing I don't understand is the "count" method the error refers to
    is the method I've declared in the ObjectDataSource for the
    SelectCountMethod property. The parameter list listed in the
    declaration (in the <SelectParameters> hive) was generated when I
    configured the ObjectDataSource to get a select parameter from a
    control (a dropdownlist called lstMFPSTABLES).

    So, a couple of questions:
    1. Why is it erroring out on the count method, when the parameters are
    meant for the select method?
    2. Is it possible to parameterize the count method? This ability
    would help in certain cases.


    Thanks in advance for your help,

    miky
     
    miky, Jun 2, 2006
    #1
    1. Advertisements

  2. miky

    Manu Guest

    Miky,

    The ObjectDataSource will search for a SelectCount method with the
    parameters specified in the SelectParameters collection. I know the
    best possible design but...

    Anyway, in your case, you are using paging and sorting so the
    ObjectDataSource will automatically add the parameters for sorting and
    paging later. If you don't specify the parameters in the ASPX you don't
    need your SelectCount method to have those parameters. However, in your
    case there is another parameter, p_PageNum that I don't know what are
    you using for that will not be generated automatically by the
    ObjectDataSource if you remove it.

    Hope it helps,
    Manuel Abadia
    http://www.manuelabadia.com
     
    Manu, Jun 5, 2006
    #2
    1. Advertisements

  3. miky

    miky Guest

    Manuel,
    Thanks for that reply. It was the most direct information I've found
    so far. So the SelectCountMethod AND the SelectMethod both look to the
    SelectParameters? That seems odd to me. It actually works out for my
    situation right now but it would rather make more sense to have two
    sets of parameters, one for the SelectMethod and another for the
    SelectCountMethod.

    My situation works now because I specified the SelectMethod parameters
    (SortParameterName, MaximumRowsParameterName,
    StartRowIndexParameterName) in the ObjectDataSource declaration and
    left the parameter that the SelectMethod and SelectCountMethod have in
    common in the SelectParameters hive. But this is a specialized case...

    Let me know if you have any further comments/clarifications. Thanks
    again for your help.


    miky
     
    miky, Jun 6, 2006
    #3
  4. miky

    Manu Guest

    Miky,

    As far as I can tell you, yes, they both look to the SelectParameters,
    and yes, it's odd. If you think about it, the SelectCountMethod does
    not make sense at all because the total item count could also be
    retrieved by the SelectMethod. Also, keep in mind that you can add
    attributes to the methods that will be consumed by the ObjectDataSource
    with attributes like:

    System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Insert)

    and you know why? There is no DataObjectMethodType.SelectCount.

    If you want to see a list of the problems and limitations of the
    ObjectDataSource you can take a look here:

    http://www.manuelabadia.com/blog/PermaLink,guid,32e83915-a503-403e-97c7-e20dcf2e0b7e.aspx

    Hope it helps,
    Manuel Abadia
    http://www.manuelabadia.com
     
    Manu, Jun 7, 2006
    #4
  5. miky

    miky Guest

    Manuel,
    Actually, the SelectCountMethod is needed in my case since I'm handling
    paging at the database, not using the GridView's default mechanism.
    Since this method only returns a designated page at a time the GridView
    can't know the total records unless I tell it.

    I'll look into your thoughts on attributes. I don't have a grasp of
    them yet.

    Thanks for your help (and the reference - I'll have to look into that
    too)!


    miky
     
    miky, Jun 7, 2006
    #5
  6. miky

    Manu Guest

    Miky,

    of course you need to retrieve the total row count from the database to
    do decent paging. However, IMHO a better design would be to have an
    output parameter in your select method instead of another method to
    call. That way your SelectMethod can be static and everything done in
    one call to the database server. With that logic split in two method
    calls you need to have an instance variable to save the total row count
    and return it in the SelectCountMethod or to perform another call to
    the database in the SelectCountMethod (with most custom paging schemas
    you can know the total row count where you do paging).

    Manuel Abadia
    http://www.manuelabadia.com
     
    Manu, Jun 8, 2006
    #6
  7. miky

    miky Guest

    I see. That makes sense. Thanks.




     
    miky, Jun 9, 2006
    #7
  8. miky

    fenildesai

    Joined:
    Oct 22, 2008
    Messages:
    1
    Likes Received:
    0
    Same Problem..Same Error...Help

    Hi..

    I m having a similar problem with objectdatasource & getting the same error.
    I m trying to implement custom paging with objectdatasource & gridview.
    I m posting the code for the SelectCount & Select Method

    Public Function SelectCount(ByVal e As ObjectDataSourceSelectingEventArgs) As Integer
    Return e.Arguments.TotalRowCount
    End Function

    Public Function [Select](ByVal UserID As Integer, ByVal WarehouseID As Integer, ByVal ItemID As Integer, ByVal startRowIndex As Integer, ByVal maximumRows As Integer, ByVal e As ObjectDataSourceSelectingEventArgs) As String
    Dim arrParams(5) As SqlParameter
    Dim objDataAccess As New clsDataAccess
    ' <summary>
    ' Populate the SqlParameter array
    ' </summary>
    arrParams(0) = New SqlParameter("UserID", UserID)
    arrParams(1) = New SqlParameter("WarehouseID", WarehouseID)
    arrParams(2) = New SqlParameter("MyItemID", ItemID)
    arrParams(3) = New SqlParameter("StartRow", startRowIndex)
    arrParams(4) = New SqlParameter("PageSize", maximumRows)
    arrParams(5) = New SqlParameter("NumResults", 0)

    'e.Arguments.TotalRowCount = CInt("NumResults")

    ' <summary>
    ' Retrieve the data from database.
    ' </summary>
    Return objDataAccess.ScalarValue_Get(WebConfigurationManager.AppSettings("Fulfillment_Server"), _
    "Fulfillment", "InventoryHistory_Get", arrParams)

    Array.Clear(arrParams, 0, 5)
    End Function

    Code for ObjectDataSource is

    <asp:ObjectDataSource ID="objDSRecHistory"
    SelectMethod="Select" EnablePaging="true"
    TypeName="ObjDataSourceInventory"
    SelectCountMethod="SelectCount"
    OnSelecting="objDSRecHistory_Selecting"
    StartRowIndexParameterName="startRowIndex"
    MaximumRowsParameterName="maximumRows"
    runat="server" >
    </asp:ObjectDataSource>

    I m getting the same error

    ObjectDataSource 'objDSRecHistory' could not find a non-generic method 'SelectCount' that has parameters: UserID, WarehouseID, ItemID, startRowIndex, maximumRows, e.

    Please Help.....
     
    fenildesai, Oct 22, 2008
    #8
  9. miky

    prmilenium

    Joined:
    Apr 2, 2012
    Messages:
    1
    Likes Received:
    0
    Both method, Select and Select count need the parameters. They (and you) need it because your going to restrict the set of all records taking into account that parameters.

    Maybe your confusion is with PageSize wich is the second restriction.

    An example without parameters:
    records: {apples, pears, lemons}
    selectcount 3

    An example with parameters:
    records: {apples, pears, lemons}
    parameter: firstlatter = a
    records: {apples}
    I need firstlatter = a in selectcount to tell that only 1 is the totalcount of selected items starting with 'a'
    selectcount 1 (without taking into account the parameter, selectcount will return 3
    , and this is not consequent with the filter )

    then you can do your "decent paging " but over the real count of records
     
    Last edited: Apr 2, 2012
    prmilenium, Apr 2, 2012
    #9
    1. Advertisements

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.