如何使用asp:asp中的表:ListView LayoutTemplate ItemTemplate

ban*_*ing 0 c# asp.net listview

当我调用ListView的DataBind()方法时,我收到以下异常消息

'Table' cannot have children of type 'ListViewDataItem'.

这是我的标记

<asp:ListView ID="lv" runat="server">
    <LayoutTemplate>
        <asp:Table ID="t" runat="server" CssClass="contentframework">
            <asp:TableHeaderRow>
                <asp:TableHeaderCell>1</asp:TableHeaderCell>
                <asp:TableHeaderCell>2</asp:TableHeaderCell>
            </asp:TableHeaderRow>

            <asp:TableRow ID="itemPlaceHolder" runat="server" />

        </asp:Table>


    </LayoutTemplate>

    <ItemTemplate>
        <asp:TableRow>
            <asp:TableCell><%# Eval("1") %></asp:TableCell>
            <asp:TableCell><%# Eval("2") %></asp:TableCell>
        </asp:TableRow>
    </ItemTemplate>

    <EmptyDataTemplate>
        <h2>No Records!</h2>
    </EmptyDataTemplate>
</asp:ListView>
Run Code Online (Sandbox Code Playgroud)

San*_*Rai 5

Asp.net服务器端控件有一些层次结构.所以它不允许ListViewDataItem作为元素的子asp:Table元素.

所以,最好你尝试简单的html表标签而不是服务器标签,如:

<asp:ListView ID="lv" runat="server">
    <LayoutTemplate>
        <table id="t" class="contentframework">
            <thead>
                <th>
                    1
                </th>
                <th>
                    2
                </th>
            </thead>
           <tr id="itemPlaceholder" runat="server"></tr>
        </table>
    </LayoutTemplate>
    <ItemTemplate>
        <tr>
            <td>
                <%# Eval("1") %>
            </td>
            <td>
                <%# Eval("2") %>
            </td>
        </tr>
    </ItemTemplate>
    <EmptyDataTemplate>
        <h2>
            No Records!</h2>
    </EmptyDataTemplate>
</asp:ListView>
Run Code Online (Sandbox Code Playgroud)

至于名单的参考图,你可以看看这个文章.

更多细节:

您正面临异常,因为ListViewDataItem类表示ListView控件(DataBoundControl)中的单个数据项,因此它不能直接作为Table类的子控件,但是当您直接嵌入时它可能是HTML表的子项它变成了html标签(如上面的代码所示).