El control DataGrid no se muestra correctamente en la página .aspx

Este artículo le ayuda a resolver el problema de que la cuadrícula de datos puede no aparecer al ver una página .aspx que contiene un control DataGrid. Este artículo hace referencia al espacio de nombres .NET Framework biblioteca de clases de Microsoft System.Data.SqlClient .

Versión del producto original:   ASP.NET
Número KB original:   313156

Síntomas

Al ver una página .aspx que contiene un control, es posible que la DataGrid cuadrícula de datos no aparezca. Como alternativa, solo puede aparecer el encabezado de la cuadrícula de datos, pero es posible que la cuadrícula de datos no contenga ningún dato.

Causa 1: la cuadrícula de datos no aparece

La cuadrícula de datos no aparece en absoluto si:

  • No se establece la DataSource propiedad del DataGrid control. O bien:

  • No se llama al DataBind método del control ni al método del objeto desde el DataGrid DataBind Page código.

Causa 2: Aparece el encabezado de cuadrícula de datos, pero la cuadrícula de datos está vacía

Aparece el encabezado de cuadrícula de datos, pero la cuadrícula de datos no contiene ningún dato si:

  • El origen de datos no contiene datos. O bien:

  • No se rellena el conjunto de datos enlazado a los DataGrid datos con en tiempo de ejecución.

    Nota

    Debe escribir código para rellenar explícitamente el conjunto de datos para que se rellene con datos de la base de DataGrid datos en tiempo de ejecución. Puede hacerlo cuando use el diseñador para agregar el objeto DataAdapter y generar un conjunto de datos en tiempo de diseño.

Este problema se produce porque la página .aspx recupera los detalles de los campos de encabezado del archivo DataSetName.xsd. El archivo DataSetName.xsd se crea para cada conjunto de datos al generar un conjunto de datos en el momento del diseño. Este archivo contiene la representación del lenguaje de marcado extensible (XML) del conjunto de datos. La página .aspx recupera los detalles del campo de encabezado de este archivo. Por lo tanto, aparece el encabezado de cuadrícula de datos, pero la cuadrícula de datos está vacía.

Resolución de la causa 1

  1. Establezca la DataSource propiedad de la para que apunte al origen de datos DataGrid adecuado. Por ejemplo:

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

    Nota

    Si recupera mediante programación los datos del origen de datos, asigne el origen de datos a la DataSource propiedad DataGrid .

  2. Si usa el diseñador para agregar una al formulario web y generar un conjunto de datos, abra la página de propiedades y, a continuación, seleccione el objeto u apropiado DataAdapter DataGrid de la DataSet DataView DataSource propiedad.

  3. Llame al DataBind método del control o al método del objeto DataGrid DataBind Page. Por ejemplo:

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

Resolución de la causa 2

  1. Asegúrese de que el origen de datos contiene datos y de que la consulta devuelve datos.

  2. Use a DataAdapter para rellenar el conjunto de datos. Por ejemplo:

    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. Reemplace el código del Form_Load evento por el código siguiente:

    Nota

    Debe cambiar y uid = <username> pwd = <strong password> a los valores correctos antes de ejecutar este código. Asegúrese de que UID tiene los permisos adecuados para realizar esta operación en la base de datos.

    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. Modifique la cadena de conexión según corresponda para su entorno.

  6. Cree el proyecto y, a continuación, vea la página .aspx en el explorador. Observe que la cuadrícula de datos no aparece.

Pasos para reproducir el comportamiento: aparece el encabezado de cuadrícula de datos, pero la cuadrícula de datos está vacía

  1. Cree un nuevo proyecto ASP.NET aplicación web en Visual Basic .NET o Visual C# .NET.

  2. Arrastre un DataGrid control desde el cuadro de herramientas y coloque el control en el formulario.

  3. Agregue un SqlDataAdapter control al formulario web. Complete los pasos siguientes en el Asistente para la configuración de DataAdapter para establecer las propiedades de conexión:

    1. Seleccione Nueva conexión para crear una nueva conexión a la base SQL Server datos. Seleccione el servidor, escriba la información de inicio de sesión y, a continuación, seleccione la base de datos Pubs.

    2. En Tipo de consulta, seleccione SQL instrucciones y, a continuación, seleccione Siguiente.

    3. Escriba la instrucción SQL siguiente:

      Select * From Authors
      
    4. Seleccione Finalizar.

  4. Haga clic con el botón secundario en DataAdapter y, a continuación, seleccione Generar conjunto de datos.

  5. Establezca la DataSource propiedad de la en el conjunto de datos que se DataGrid genera.

  6. En el diseñador, haga doble clic en la página .aspx para abrir la ventana de código subyacente. Agregue el siguiente código al Page_Load evento:

    DataGrid1.DataBind()
    
    DataGrid1.DataBind();
    
  7. Cree el proyecto y, a continuación, vea la página .aspx en el explorador.

    Nota

    Aparece el encabezado de la cuadrícula de datos, pero la cuadrícula de datos no contiene ningún dato.

Referencias

Para obtener más información sobre el DataGrid control y para los ejemplos que usan este control, vea Clase DataGrid.