1

我正在尝试将 a 转换GridView为 aListView以允许我更好地控制表格显示。

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>

当我将其转换为 aListView时,根本不会向页面呈现 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()控件?

4

1 回答 1

3

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

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

MaximumRows如果使用 GridView 属性指定了 Grid 视图: PageSize. 如果您不指定,10则使用默认值MaximumRows.

如果您ListView没有这样的设置PageSize,因此没有任何默认值的选项。如果您Select在完成列表视图绑定时检查您的方法,您将看到MaximumRowsequals的值-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参数值。

于 2013-08-14T06:14:46.530 回答