当空的asp.net时,ListView LayoutTemplate不显示

时间:2011-03-31 13:05:04

标签: asp.net listview

我有一个<asp:ListView>但由于某种原因,虽然<EmptyDataTemplate>部分显示,但是当列表为空时,LayoutTemplate部分不会显示。 LayoutTemplate包含表的标题,我想在数据源中没有项目时显示空表,而不仅仅是EmptyDataTemplate的内容。

如果没有选择,我会将LayoutTemplate复制到EmptyDataTemplate中,但是这样做似乎很愚蠢。想法?

3 个答案:

答案 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>内的任何内容都不会被替换,所以一切都显示出来。