我有一个<asp:ListView>
但由于某种原因,虽然<EmptyDataTemplate>
部分显示,但是当列表为空时,LayoutTemplate部分不会显示。 LayoutTemplate包含表的标题,我想在数据源中没有项目时显示空表,而不仅仅是EmptyDataTemplate的内容。
如果没有选择,我会将LayoutTemplate复制到EmptyDataTemplate中,但是这样做似乎很愚蠢。想法?
答案 0 :(得分:13)
来自MSDN:
空模板显示在
ListView
控制数据源 那个绑定到控件没有 包含任何记录和InsertItemPosition
属性设置为InsertItemPosition.None
。模板 被渲染而不是LayoutTemplate
模板。如果InsertItemPosition
属性设置为 除了以外的值InsertItemPosition.None
,EmptyDataTemplate
模板不是 呈现。
这里的关键词是“...... LayoutTemplate
模板的模板呈现而不是”
所以我认为,您必须将LayoutTemplate
复制到EmptyDataTemplate
模板中。
答案 1 :(得分:0)
您还可以将您置于用户控件(.acsx)中。然后将它包含在布局模板和空模板中...它会感觉不那么愚蠢,因为你仍然可以在一个地方管理它。我知道你对复制相同代码的感觉......看起来像五年级学生会做的事情。使用控件是一种更成熟的方法。
答案 2 :(得分:0)
以一种非常简单的方式,您可以获得标题和消息,说明没有数据。
您使LayoutTemplate
像以下想法一样:
<LayoutTemplate>
<table>
<tr>
<td>a header</td>
<td>another header</td>
<td>third header</td>
</tr>
<tr runat="server" id="itemPlaceholder">
<td colspan="3"
There is no data!
</td>
</tr>
</table>
</LayoutTemplate>
请注意,作为占位符的tr
(由id =&#34; itemPlaceholder&#34;标记)实际上包含某些内容。它包含没有数据时应显示的内容。然后,在后面的代码中,将<EmptyTemplate>
设置为等于<LayoutTemplate>
(这样您只能维护一个这样的模板)。我是这样做的:
Private Sub lvwThings_Init(sender As Object, e As EventArgs) Handles lvwThings.Init
lvwThings.EmptyDataTemplate = lvwThings.LayoutTemplate
End Sub
逻辑如下:
如果 数据,即使用实际的<LayoutTemplate>
时,将更换整个<tr runat="server" id="itemPlaceholder">
,其中包含td
及其包含的文字由<ItemTemplate>
。
但是,当有没有数据时,即使用<EmptyTemplate>
时(而不是<LayoutTemplate>
),<EmptyTemplate>
内的任何内容都不会被替换,所以一切都显示出来。