1

调用 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>
4

3 回答 3

6

Asp.net 服务器端控件有一些层次结构。所以它不允许ListViewDataItem作为 element 的子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>

作为列表视图的参考,您可以查看这篇文章。

更多细节:

您正面临异常,因为ListViewDataItem类表示 ListView 控件(即 DataBoundControl)中的单个数据项,因此它不能直接是 Table 类的子控件,但当您直接嵌入时,它显然可以是 HTML 表的子控件将其转换为 html 标签(如上面的代码所示)。

于 2013-07-19T13:13:43.303 回答
0

尝试这个:

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

        <asp:PlaceHolder id="itemPlaceholder" runat="server" />

    </asp:Table>


</LayoutTemplate>

这应该允许列表项填充为实际行。

于 2012-11-29T15:58:18.533 回答
0

您必须在 asp:TableRow 中嵌套一个 asp:tableCell ,然后占位符应该在 tablecell 中工作

<asp:TableRow runat="server">
    <asp:TableCell ID="TableCell2" runat="server">
        <asp:PlaceHolder runat="server" ID="itemplaceholder" />
    </asp:TableCell>
</asp:TableRow>`
于 2017-04-01T17:42:20.040 回答