DataGrid-Steuerelement wird auf der ASPX-Seite nicht richtig angezeigt

Dieser Artikel hilft Ihnen, das Problem zu beheben, dass das Datenraster möglicherweise nicht angezeigt wird, wenn Sie eine ASPX-Seite anzeigen, die ein DataGrid-Steuerelement enthält. Dieser Artikel bezieht sich auf den Namespace "Microsoft .NET Framework Class System.Data.SqlClient Library".

Ursprüngliche Produktversion:   ASP.NET
Ursprüngliche KB-Nummer:   313156

Problembeschreibung

Wenn Sie eine ASPX-Seite DataGrid anzeigen, die ein Steuerelement enthält, wird das Datenraster möglicherweise nicht angezeigt. Alternativ kann nur die Kopfzeile des Datenrasters angezeigt werden, aber das Datenraster darf keine Daten enthalten.

Ursache 1: Datenraster wird nicht angezeigt

Das Datenraster wird überhaupt nicht angezeigt, wenn:

  • Sie legen die Eigenschaft des Steuerelements nicht DataSource DataGrid fest. Oder:

  • Sie rufen nicht die DataBind Methode des DataGrid Steuerelements oder die Methode des DataBind Objekts aus dem Code Page auf.

Ursache 2: Datenrasterkopf wird angezeigt, das Datenraster ist jedoch leer

Der Datenrasterkopf wird angezeigt, das Datenraster enthält jedoch keine Daten, wenn:

  • Die Datenquelle enthält keine Daten. Oder:

  • Sie füllen das Dataset, das zur Laufzeit an die Daten gebunden ist, nicht DataGrid aus.

    Hinweis

    Sie müssen Code schreiben, um das Dataset explizit auszufüllen, damit es DataGrid zur Laufzeit mit Daten aus der Datenbank aufgefüllt wird. Sie können dies tun, wenn Sie den Designer verwenden, um das DataAdapter-Objekt hinzuzufügen und zur Entwurfszeit ein Dataset zu generieren.

Dieses Problem tritt auf, weil die ASPX-Seite die Details der Kopfzeilenfelder aus der Datei "DataSetName.xsd" abruft. Die Datei "DataSetName.xsd" wird für jedes Dataset erstellt, wenn Sie zur Entwurfszeit ein Dataset generieren. Diese Datei enthält die XML-Darstellung (Extensible Markup Language) des Datasets. Die ASPX-Seite ruft die Details des Kopfzeilenfelds aus dieser Datei ab. Daher wird der Datenrasterkopf angezeigt, aber das Datenraster ist leer.

Lösung für die Ursache 1

  1. Legen Sie die DataSource Eigenschaft der DataGrid so fest, dass sie auf die entsprechende Datenquelle verweist. Zum Beispiel:

    DataGrid1.DataSource = dataSet11.Tables("Authors")
    
    DataGrid1.DataSource = dataSet11.Tables["Authors"] ;
    

    Hinweis

    Wenn Sie die Daten programmgesteuert aus der Datenquelle abrufen, weisen Sie die Datenquelle der DataSource Eigenschaft des DataGrid .

  2. Wenn Sie den Designer zum Hinzufügen eines Formulars DataAdapter zum Webformular und zum Generieren eines Datasets verwenden, öffnen Sie die DataGrid Eigenschaftenseite, und wählen Sie dann das entsprechende DataSet Objekt oder Objekt in der Eigenschaft DataView DataSource aus.

  3. Rufen Sie die DataBind Methode des DataGrid Steuerelements oder die Methode des Page DataBind -Objekts auf. Zum Beispiel:

    'Use one of the following lines.
    'Page.DataBind()
    DataGrid1.DataBind()
    
    //Use one of the following lines.
    //Page.DataBind();
    DataGrid1.DataBind();
    

Lösung für die Ursache 2

  1. Stellen Sie sicher, dass die Datenquelle Daten enthält und die Abfrage Daten zurückgibt.

  2. Verwenden Sie DataAdapter a, um das Dataset auszufüllen. Zum Beispiel:

    sqlDataAdapter1.Fill(dataSet11, "Authors")
    
    sqlDataAdapter1.Fill(dataSet11,"Authors");
    
    

Status

This behavior is by design.

More information

Bind the DataGrid Web server control to a data source through the DataSource property of the DataGrid to correctly render the data grid on the page. After you set the data source, you must also explicitly call the DataBind method of the DataGrid control or the DataBind method of the Page object from your code.

Steps to reproduce the behavior - data grid does not appear

  1. Create a new ASP.NET Web Application project in Visual Basic .NET or Visual C# .NET.

  2. Drag a DataGrid control from the toolbox, and drop the control onto the form.

  3. In the designer, double-click the .aspx page to open the code-behind window. Add the following code to the top of the code-behind window to add the required namespace references:

    Imports System.Data
    Imports System.Data.SqlClient
    
    using System.Data.SqlClient;
    
  4. Ersetzen Sie den Code im Form_Load Ereignis durch den folgenden Code:

    Hinweis

    Sie müssen uid = <username> die richtigen Werte ändern, pwd = <strong password> bevor Sie diesen Code ausführen. Stellen Sie sicher, dass UID über die entsprechenden Berechtigungen zum Ausführen dieses Vorgangs in der Datenbank verfügt.

    Private Sub Page_Load(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles MyBase.Load
         'Write code to access the database.
         Dim myConnection As New SqlConnection("server=(local);database=pubs;uid=<username>;pwd=<strong password>")
         Dim myDataAdapter As New SqlDataAdapter("select * from authors", myConnection)
         Dim myDataSet As New DataSet()
         myConnection.Open()
         myDataAdapter.Fill(myDataSet)'Uncomment the following line to resolve this problem.
         'DataGrid1.DataSource = myDataSet
         DataGrid1.DataBind()
    End Sub
    
    private void Page_Load(object sender, System.EventArgs e)
    {
        //Write code to access the database.
        SqlConnection myConnection = new SqlConnection("server=(local);database=pubs;uid=<username>;pwd=<strong password>");
        SqlDataAdapter myDataAdapter = new SqlDataAdapter("select * from authors", myConnection);
        DataSet myDataSet = new DataSet();
        myConnection.Open();
        myDataAdapter.Fill(myDataSet);
    
        //Uncomment the following line to resolve this problem.
        //DataGrid1.DataSource = myDataSet;
        DataGrid1.DataBind();
    }
    
  5. Ändern Sie die Verbindungszeichenfolge entsprechend Ihrer Umgebung.

  6. Erstellen Sie das Projekt, und zeigen Sie dann die ASPX-Seite im Browser an. Beachten Sie, dass das Datenraster nicht angezeigt wird.

Schritte zum Reproduzieren des Verhaltens – Datenrasterkopf wird angezeigt, das Datenraster ist jedoch leer

  1. Erstellen Sie ein neues ASP.NET Webanwendungsprojekt in Visual Basic .NET oder Visual C# .NET.

  2. Ziehen Sie ein DataGrid Steuerelement aus der Toolbox, und legen Sie es auf dem Formular ab.

  3. Fügen Sie dem Webformular ein SqlDataAdapter Steuerelement hinzu. Führen Sie die folgenden Schritte im DataAdapter-Konfigurations-Assistenten aus, um die Verbindungseigenschaften festzulegen:

    1. Wählen Sie "Neue Verbindung" aus, um eine neue Verbindung mit Ihrer SQL Server-Datenbank zu erstellen. Wählen Sie den Server aus, geben Sie die Anmeldeinformationen ein, und wählen Sie dann die Pubs-Datenbank aus.

    2. Wählen Sie unter Abfragetyp SQL Anweisungen aus, und klicken Sie dann auf "Weiter".

    3. Geben Sie die folgende SQL Anweisung ein:

      Select * From Authors
      
    4. Wählen Sie Fertig stellen aus.

  4. Klicken Sie mit der rechten Maustaste auf "DataAdapter", und wählen Sie "Dataset generieren" aus.

  5. Legen Sie die DataSource Eigenschaft des DataGrid Datasets fest, das generiert wird.

  6. Doppelklicken Sie im Designer auf die ASPX-Seite, um das CodeBehind-Fenster zu öffnen. Fügen Sie dem Ereignis den folgenden Code Page_Load hinzu:

    DataGrid1.DataBind()
    
    DataGrid1.DataBind();
    
  7. Erstellen Sie das Projekt, und zeigen Sie dann die ASPX-Seite im Browser an.

    Hinweis

    Die Kopfzeile des Datenrasters wird angezeigt, aber das Datenraster enthält keine Daten.

References

Weitere Informationen zum DataGrid Steuerelement und zu Beispielen, die dieses Steuerelement verwenden, finden Sie unter DataGrid-Klasse.