2010-11-23 6 views
1

Ich möchte eine Grid-Ansicht 'Header anzeigen, auch wenn die Datenquelle, die an das Raster gebunden ist, leer ist? Gibt es eine Möglichkeit, dasselbe zu erreichen, ohne eine BLANK-Zeile hinzuzufügen?Grid-Ansicht asp.net show header wenn keine Daten

+0

Aus welchem ​​Grund möchten Sie das tun ... zeigt leere Gridview mit Header allein? –

+1

Wenn die Datenquelle leer ist, muss der Benutzer eine Leerstelle anzeigen (wahrscheinlich mit dem Text 'No Items Found'). und er/sie kann es nicht verstehen. – Rauf

+0

stimme ich zu. Es ist manchmal gut, die Spaltenüberschriften anzuzeigen, auch wenn keine Daten vorhanden sind. – Jamie

Antwort

0

Der einfachste Weg wäre, ein eigenes GridView zu erstellen, das von der Klasse GridView erbt. Überschreiben Sie dann die CreateChildControls Methode, um eine neue leere Tabelle zu erstellen.

So etwas sollte funktionieren:

protected GridViewRow _footerRow2; 
protected GridViewRow _headerRow2; 

protected override int CreateChildControls(System.Collections.IEnumerable dataSource, bool dataBinding) 
{ 
    // Call base method and get number of rows 
    int numRows = base.CreateChildControls(dataSource, dataBinding); 

    if (numRows == 0) 
    { 
     //no data rows created, create empty table 
     //create table 
     Table table = new Table(); 
     table.ID = this.ID; 

     //convert the exisiting columns into an array and initialize 
     DataControlField[] fields = new DataControlField[this.Columns.Count]; 
     this.Columns.CopyTo(fields, 0); 

     if (this.ShowHeader) 
     { 
      //create a new header row 
      _headerRow2 = base.CreateRow(-1, -1, DataControlRowType.Header, DataControlRowState.Normal); 

      this.InitializeRow(_headerRow2, fields); 
      _headerRow2.EnableTheming = true; 
      table.Rows.Add(_headerRow2); 
     } 

     if (this.ShowFooter) 
     { 
      //create footer row 
      _footerRow2 = base.CreateRow(-1, -1, DataControlRowType.Footer, DataControlRowState.Normal); 

      this.InitializeRow(_footerRow2, fields); 
      _footerRow2.EnableTheming = true; 
      table.Rows.Add(_footerRow2); 
     } 

     this.Controls.Clear(); 
     this.Controls.Add(table); 
    } 

    return numRows; 
} 

Grundsätzlich Sie überprüfen, ob die Gridview alle Zeilen hat und es ihr dann nicht die Zeile und Fußzeile Zeilenkopf erstellen (wenn sie aktiviert sind).

EDIT:

Auch, wenn Sie Ihre EmptyDataText noch zeigen wollen, können Sie diese Linien dazwischen die Erstellung der Kopf- und Fußzeilen hinzufügen könnten.

GridViewRow emptyRow; 

if (this.EmptyDataTemplate != null) 
{ 
    emptyRow = this.Controls[0].Controls[0] as GridViewRow; 
} 
table.Rows.Add(emptyRow); 
0

Ab ASP.NET 4 können Sie die ShowHeaderWhenEmpty Eigenschaft des Gridview true gesetzt.