1

当我尝试将 ObjectDataSource、ListView 和 DataPager 连接在一起时,正确的值不会传递给 ObjectDataSource 的 select 方法。-1 总是传递给maximumRows, 0 传递给startRowIndex

<asp:DataPager runat="server" ID="Address_DataPager" PageSize="50" PagedControlID="Address_ListView" >
    <Fields>
        <asp:NextPreviousPagerField ShowFirstPageButton="true" ShowLastPageButton="true"
            FirstPageText="|&lt;&lt; " LastPageText=" &gt;&gt;|"
            NextPageText=" &gt; " PreviousPageText=" &lt; " />
    </Fields>
</asp:DataPager>
<asp:ListView ID="Address_ListView" runat="server"
    DataSourceID="Address_DataSource" DataKeyNames="AddressId" >
    <LayoutTemplate>
        <table class="resultsGrid">
            <tr class="gridRow">
                <th scope="col">Address</th>
            </tr>
            <asp:PlaceHolder ID="itemPlaceholder" runat="server" />
        </table>
    </LayoutTemplate>
    <ItemTemplate>
        <tr class="gridRow">
            <td>
                <asp:Label ID="Address_Label" runat="server" Text='<%# Eval("Address") %>' />
            </td>
        </tr>
    </ItemTemplate>
</asp:ListView>
<asp:ObjectDataSource ID="Address_DataSource" runat="server" TypeName="SuperApp.Business.Address"
    SelectMethod="SelectAddress" EnablePaging="True"
    MaximumRowsParameterName="maximumRows"
    StartRowIndexParameterName="startRowIndex" >
    <SelectParameters>
        <asp:Parameter Name="maximumRows"   DefaultValue="10" Type="Int32" />
        <asp:Parameter Name="startRowIndex" DefaultValue="5"  Type="Int32" />
    </SelectParameters>
</asp:ObjectDataSource>

Address这是命名空间中类中的 select 方法SuperApp.Business

System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Select, false)]
public DataTable SelectAddress(int maximumRows, int startRowIndex)
{
    if (maximumRows < 1) throw new ArgumentOutOfRangeException("maximumRows", "Maximum rows should be greater than zero.");
    if (startRowIndex < 0) throw new ArgumentOutOfRangeException("startRowIndex", "Start row index should be greater or equal to zero.");
    if (startRowIndex >= maximumRows) throw new ArgumentOutOfRangeException("startRowIndex", "Start row index should be less than the maximum rows.");

    // Would do something interesting here.
    return null;
}

总是抛出第一个异常,总是抛出maximumRows-1。我试过了:

  • 将 DataPager 移入 LayoutTemplate。
  • 将 DataPager 移入 LayoutTemplate 并删除 PagedControlID 值。
  • 将 DefaultValue 值更改为各种各样的东西。
  • 从参数中删除 DefaultValues。
  • 从参数中删除类型。
  • 完全删除 SelectParameters。

这可能是我看不到的显而易见的事情。有什么建议么?

4

1 回答 1

2

是的,这应该是显而易见的。

您缺少 ,SelectCountMethod因此ObjectDataSource不仅可以选择当前页面,还可以确定那里有多少对象。

一个工作示例:

http://netpl.blogspot.com/2009/04/how-to-controll-aspnet-listview-page.html

于 2012-07-30T06:09:41.057 回答