Prüfen, ob im DataGrid Daten vorhanden sind

Written on November 20, 2003

Das DataGrid ist ein nettes Control, wenn es um die Darstellung von Daten in tabellarischer Form geht.

Allerdings ist es unschön, wenn keine Datensätze vorhanden sind, und nur die Headerzeile angezeigt wird.

Besser wäre ein Hinweis in der Art "Es liegen keine Daten vor.".

Doch wie lässt sich das realisieren?

Möglichkeiten gibt es viele, einige werde ich hier vorstellen:

1. Prüfung bereits in der Datenquelle:

Angenommen, wir verwenden zum Lesen der Daten einen SqlDataReader, könnte eine Prüfung wie folgt aussehen:

public void ReadMyData(string myConnString)

{

// Erzeugen des SQL-Strings und ausführen der Abfrage  

string mySelectQuery = "SELECT OrderID, CustomerID FROM Orders";  

SqlConnection myConnection = new SqlConnection(myConnString);  

SqlCommand myCommand = new SqlCommand(mySelectQuery,myConnection);  

myConnection.Open();  

SqlDataReader myReader;  

myReader = myCommand.ExecuteReader();  

// Prüfen, ob Daten vorhanden sind  

**if(myReader.HasRows)

{  

    // Daten an DataSet / DataGrid übergeben  

}  

else  

{  

     Page.Response.Write("Es liegen keine Daten vor");  

}  

** // SqlDataReader schließen

myReader.Close();

// Verbindung zur Datenbank schließen  

myConnection.Close();

}

2. Prüfung im DataSet:

Eine weitere Möglichkeit ist, das DataSet, das als Datenquelle verwendet wird, auf Daten zu überprüfen:

public void DisplayMyGrid(string myConnString, DataSet myDataSet)

{

// Prüfen, ob Daten vorhanden sind  

if(myDataSet.Tables(0).Rows.Count\>0)  

{  

    // ja, dann Daten ausgeben  

    DataGrid myDataGrid = new DataGrid();  

    myDataGrid.DataSource = myDataSet;  

    myDataGrid.DataBind();  

}  

else  

{  

    // nein, dann Fehlermeldung ausgeben  

    Page.Response.Write("Es liegen keine Daten vor.");  

}  

}

3. Prüfung im DataGrid selbst

Letztlich besteht auch noch die Möglichkeit, die Prüfung im DataGrid selbst vorzunehmen.

Hierzu muß man die Anzahl der Items im DataGrid mittels DataGrid.Items.Count auslesen.

Hierbei sind allerdings die Unwägbarkeiten im Verhalten des DataGrids mit (in)aktivem Header / Footer / Pager zu berücksichtigen, wie ich sie in meinem Artikel Das ASP.NET DataGrid selbst erweitern unter "Objekt-Orientierung" beschrieben habe.

Aufgrund der Fehlerträchtigkeit dieses Ansatzes möchte ich auf nähere Erläuterungen verzichten.

Die beiden ersten vorgestellten Ansätze funktionieren mit kleinen Anpassungen mit praktisch jeder Datenquelle und vor allen Dingen zuverlässig. Weshalb also unnötig Probleme provozieren?