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
DataSourceDataGridfest. Oder:Sie rufen nicht die
DataBindMethode desDataGridSteuerelements oder die Methode desDataBindObjekts aus dem CodePageauf.
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
DataGridaus.Hinweis
Sie müssen Code schreiben, um das Dataset explizit auszufüllen, damit es
DataGridzur 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
Legen Sie die
DataSourceEigenschaft derDataGridso 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
DataSourceEigenschaft desDataGrid.Wenn Sie den Designer zum Hinzufügen eines Formulars
DataAdapterzum Webformular und zum Generieren eines Datasets verwenden, öffnen Sie dieDataGridEigenschaftenseite, und wählen Sie dann das entsprechendeDataSetObjekt oder Objekt in der EigenschaftDataViewDataSourceaus.Rufen Sie die
DataBindMethode desDataGridSteuerelements oder die Methode des PageDataBind-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
Stellen Sie sicher, dass die Datenquelle Daten enthält und die Abfrage Daten zurückgibt.
Verwenden Sie
DataAdaptera, 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
Create a new ASP.NET Web Application project in Visual Basic .NET or Visual C# .NET.
Drag a
DataGridcontrol from the toolbox, and drop the control onto the form.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.SqlClientusing System.Data.SqlClient;Ersetzen Sie den Code im
Form_LoadEreignis 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 Subprivate 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(); }Ändern Sie die Verbindungszeichenfolge entsprechend Ihrer Umgebung.
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
Erstellen Sie ein neues ASP.NET Webanwendungsprojekt in Visual Basic .NET oder Visual C# .NET.
Ziehen Sie ein
DataGridSteuerelement aus der Toolbox, und legen Sie es auf dem Formular ab.Fügen Sie dem Webformular ein
SqlDataAdapterSteuerelement hinzu. Führen Sie die folgenden Schritte im DataAdapter-Konfigurations-Assistenten aus, um die Verbindungseigenschaften festzulegen: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.
Wählen Sie unter Abfragetyp SQL Anweisungen aus, und klicken Sie dann auf "Weiter".
Geben Sie die folgende SQL Anweisung ein:
Select * From AuthorsWählen Sie Fertig stellen aus.
Klicken Sie mit der rechten Maustaste auf "DataAdapter", und wählen Sie "Dataset generieren" aus.
Legen Sie die
DataSourceEigenschaft desDataGridDatasets fest, das generiert wird.Doppelklicken Sie im Designer auf die ASPX-Seite, um das CodeBehind-Fenster zu öffnen. Fügen Sie dem Ereignis den folgenden Code
Page_Loadhinzu:DataGrid1.DataBind()DataGrid1.DataBind();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.