6 Stimmen

ListView LayoutTemplate wird nicht angezeigt, wenn leer asp.net

Ich habe eine <asp:ListView> aber aus irgendeinem Grund wird der Abschnitt LayoutTemplate nicht angezeigt, wenn die Liste leer ist, obwohl die <EmptyDataTemplate> Abschnitt zeigt. Das LayoutTemplate enthält die Überschriften für die Tabelle, und ich möchte eine leere Tabelle anzeigen, wenn es keine Elemente in der Datenquelle gibt, nicht nur den Inhalt von EmptyDataTemplate.

Wenn es keine Wahl gibt, werde ich das LayoutTemplate in EmptyDataTemplate kopieren, aber es scheint dumm, dies tun zu müssen. Ideen?

14voto

Oleks Punkte 31284

Von der MSDN :

Die leere Vorlage ist dis ListView Kontrolle, wenn die Daten die an das Steuerelement gebunden ist, keine keine Datensätze enthält und InsertItemPosition p InsertItemPosition.None . T [ ] LayoutTemplate Vorlage. [ ] InsertItemPosition p einen anderen Wert als InsertItemPosition.None , EmptyDataTemplate t gerendert.

die Schlüsselwörter sind hier "...die Vorlage wird gerendert stattdessen der LayoutTemplate Vorlage ..."

Ich denke, Sie müssen die LayoutTemplate in die EmptyDataTemplate Vorlage.

0voto

eDriven_Levar Punkte 185

Sie können sie auch in eine Benutzersteuerung (.acsx) einfügen. Dann fügen Sie es in die Layout-Vorlage und die leere Vorlage ein... und es wird sich weniger dumm anfühlen, da Sie es immer noch an einer Stelle verwalten können. Ich weiß, wie du dich fühlst, wenn du denselben Code kopierst... das scheint etwas zu sein, was ein Fünftklässler tun würde. Die Verwendung eines Steuerelements ist ein erwachsenerer Ansatz.

0voto

Magnus Punkte 1318

Auf sehr einfache Weise können Sie sowohl Ihre Kopfzeilen als auch eine Meldung erhalten, die besagt, dass keine Daten vorhanden waren.

Sie machen Ihre LayoutTemplate wie die folgende Idee:

<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>

Beachten Sie, dass die tr das heißt, der Platzhalter (gekennzeichnet durch id="itemPlaceholder") enthält tatsächlich etwas. Er enthält das, was angezeigt werden soll, wenn keine Daten vorhanden sind. Im dahinter liegenden Code setzen Sie dann die <EmptyTemplate> gleich sein mit dem <LayoutTemplate> (so dass Sie nur eine solche Vorlage zu pflegen haben). Ich mache es folgendermaßen:

Private Sub lvwThings_Init(sender As Object, e As EventArgs) Handles lvwThings.Init
    lvwThings.EmptyDataTemplate = lvwThings.LayoutTemplate
End Sub

Die Logik ist also wie folgt:

Wenn es es Daten, d.h. wenn die tatsächlichen <LayoutTemplate> verwendet wird, wird die gesamte <tr runat="server" id="itemPlaceholder"> , mit dem td und der darin enthaltene Text werden durch den <ItemTemplate> .

Aber wenn es eine keine Daten, d.h. wenn die <EmptyTemplate> verwendet wird (anstelle des <LayoutTemplate> ), nichts innerhalb der <EmptyTemplate> wird ersetzt, so dass alles so angezeigt wird, wie es ist.

0voto

Minh Thuận Punkte 347

Ich habe gerade dieses Problem gelöst, wenn Sie InsertItemTemplate mit EmptyDataTemplate haben. Arrcording zu MS docs, das ist Sie können nicht beide haben. Also habe ich beschlossen, ein neues Tag in InsertItemTemplate zu erstellen. Sie können meinen Beispielcode hier sehen.

   <InsertItemTemplate>
        <% if (CheckEmptyTable())
            { %>
              <tr> 
                 <td colspan="6">No data founds</td>
              </tr>
        <% } %>
         // Your insert template input here 
        <tr style="">

        </tr>
    </InsertItemTemplate>

Mein Ergebnisbild: enter image description here

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X