ListView不会填充分页的ObjectDataSource

时间:2013-08-14 00:48:20

标签: asp.net listview gridview objectdatasource

我正在尝试将GridView转换为ListView,以便让我更好地控制表格显示。

GridView正常工作,如此处所定义并正确显示数据。

<asp:GridView ID="gvService" runat="server"
    AllowPaging="True"
    AutoGenerateColumns="False"
    DataKeyNames="ID"
    DataSourceID="objService">
    <Columns>
        <asp:BoundField DataField="ID" HeaderText="ID" />
        <asp:BoundField DataField="Name" HeaderText="Name" />
        <asp:BoundField DataField="ServiceType" HeaderText="Type" />
    </Columns>
</asp:GridView>

当我将其转换为ListView时,根本不会向页面呈现HTML。我甚至将它们并排放置,GridView有效,但ListView不显示。

<asp:ListView ID="lvService" runat="server"
    DataSourceID="objService">
    <LayoutTemplate>
        <table>
        <tr>
            <th>ID</th>
            <th>Name</th>
            <th>Type</th>
        </tr>
        <tr id="itemPlaceholder" runat="server"></tr>
        </table>
    </LayoutTemplate>
    <ItemTemplate>
        <tr>
            <td><%# Eval("ID") %></td>
            <td><%# Eval("Name") %></td>
            <td><%# Eval("ServiceType") %></td>
        </tr>
    </ItemTemplate>
    <AlternatingItemTemplate>
        <tr>
            <td><%# Eval("ID") %></td>
            <td><%# Eval("Name") %></td>
            <td><%# Eval("ServiceType") %></td>
        </tr>
    </AlternatingItemTemplate>
</asp:ListView>

以下是ObjectDataSource

<asp:ObjectDataSource ID="objService" runat="server"
    EnablePaging="true"
    TypeName="My.Data.DataSource.ServiceDataSource" DataObjectTypeName="My.Data.Service.ServiceSearch"
    SelectMethod="Search"
    SelectCountMethod="SearchCount">
    <SelectParameters>
        <asp:ControlParameter ControlID="tbSearch" Name="Search" PropertyName="Text" Type="String" />
    </SelectParameters>
</asp:ObjectDataSource>

我觉得我在这里缺少一些基本的东西。有关为什么GridView填充但ListView不填充的任何想法?

我是否需要在后面的代码中手动 DataBind()控件?

1 个答案:

答案 0 :(得分:3)

这里的问题似乎与ListView有关。由于您已为ObjectDataSource设置了EnablePaging="true",因此您的ObjectDataSource始终会查找包含两个参数的Select方法:MaximumRows&amp; startRowIndex

startRowIndex会根据您的MaximumRows设置自动递增。

如果使用GridView属性MaximumRows指定网格视图PageSize。如果您未指定此项,10将使用默认值MaximumRows

如果你的ListView没有PageSize这样的设置,那么任何默认值都没有选项。如果您在列表视图绑定完成后检查Select方法,则会看到MaximumRows的值等于-1

因此,您需要应用的更正是在.aspx文件中使用DataPager,如下所示。请注意,PagedControlID属性设置为列表视图的ID。

<asp:DataPager ID="DataPager1" runat="server" PagedControlID="lvService"
        PageSize="20">
        <Fields>
            <asp:NextPreviousPagerField ButtonType="Button" ShowFirstPageButton="True"
                ShowLastPageButton="True" />
        </Fields>
    </asp:DataPager>

同样,PageSize属性指定MaximumRows参数值。