【问题标题】:ListView doesn't populate with paged ObjectDataSourceListView 不填充分页的 ObjectDataSource
【发布时间】:2013-08-14 00:48:19
【问题描述】:

我正在尝试将 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()在后面的代码中控制吗?

【问题讨论】:

  • 显示您的 ObjectDataSource 的 Select 方法
  • 请发布My.Data.Service.ServiceSearch类的所有代码。

标签: asp.net listview gridview objectdatasource


【解决方案1】:

这里的问题似乎出在 ListView 上。由于您为 ObjectDataSource 设置了EnablePaging="true",因此您的ObjectDataSource 将始终寻找具有两个参数的Select 方法:MaximumRowsstartRowIndex

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

如果使用 GridView 属性指定网格视图 MaximumRowsPageSize。如果你不指定这个,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 参数值。

【讨论】:

  • 这听起来可能是解决办法。直到今天晚些时候我才能访问代码,但会告诉你它是怎么回事。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-12
  • 1970-01-01
  • 1970-01-01
  • 2015-06-28
  • 2016-01-04
  • 2016-05-12
相关资源
最近更新 更多