none
Llenar DataGridView con DataReader RRS feed

  • Pregunta

  • Visual C# 2008

    Hola a todos

    En una Aplicación Windows Form ¿Se puede llenar con datos un Control DataGridView utilizando exclusivamente un DataReader, es decir, sin la necesidad de un DataTable o un DataSet?

    Desde ya Muchísimas Gracias


    -- Skar.2007
    miércoles, 20 de abril de 2011 15:14

Respuestas

  • Puedes llenar datos a tu dataGridView usando varias tecnicas, entre ellas:

    Llenar con dataTable:

    da.fill(tuDataTable)

    me.dgvDatos.DataSource=tuDataTable

     

    Llenar con DataSet:

    da.fill(dst.Tables(0))

    me.dgvDatos.DataSource=dst.tables(0)

     

    LLenar con Listas Genericas y usando el metodo Load de tu datatable.

     

    Hay varias formas, creo q debieras analizar cual forma es mejor que otra, la cantidad de datos, tiempo de respuesta.

    SALUDOS.

     


    Programador .NET - Desarrollador 5 Estrellas.
    viernes, 22 de abril de 2011 16:39
  • No, puesto que un datareader proporciona una forma de leer una secuencia de filas sólo hacia delante en una base de datos de SQL Server, retornando los valores un record a la vez, por lo que si establece la propiedad datasource de la grilla este tomara una sola fila del reader y el control mostrara un solo record, siempre y cuando haya llamado el metodo Read() del reader para posicionar el cursor.

    Ademas la clase DataGridView admite el modelo de enlace de datos estándar de formularios Windows Forms. Esto significa que el origen de datos puede ser de cualquier tipo que implemente una de las interfaces siguientes:

    • La interfaz IList, incluidas las matrices unidimensionales.

    • La interfaz IListSource, como las clases DataTable y DataSet.

    • La interfaz IBindingList, como la clase BindingList<(Of <(T>)>).

    • La interfaz IBindingListView, como la clase BindingSource

    Ver Ejemplo

    public static List<MyData> LeeRelacion1(DateTime date)
        {
          #region DataReader
          using (SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["ConectionStringName"].ConnectionString))
          {
            using (SqlCommand command = new SqlCommand("ProcedureName", connection))
            {
              command.CommandType = CommandType.StoredProcedure;
    
              command.Parameters.AddWithValue("@ParameterName", date);
    
              connection.Open();
    
              List<MyData> list = new List<MyData>();
    
              using (SqlDataReader reader = command.ExecuteReader())
              {
                while (reader.Read())
                {
                  if (reader.HasRows)
                  {
                    MyData temp = new MyData
                      (
                    (int)reader[0],
                    (DateTime)reader[1],
                    (string)reader[2],
                    (int)reader[3],
                    (int)reader[4],
                    (int)reader[5],
                    (string)reader[6],
                    (string)reader[7]
                    );
    
                    list.Add(temp);
                  }
    
                }
              }
              return list;
            }
          } 
          #endregion
        }

     

     


    Angel R. Jimenez G.
    Software Development
    Santo Domingo
    Republica Dominicana
    viernes, 22 de abril de 2011 17:13

Todas las respuestas

  • podrias usar

    SqlDataReader = cmd.ExecuteReader();

    DataTable dt = new DataTable();
    dt.Load(dr);

    DataGridVie1.DataSource = dt;

     

    o sea cargas el reader en un datatable

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Propuesto como respuesta Nerk10 lunes, 11 de febrero de 2013 16:43
    miércoles, 20 de abril de 2011 15:29
  • No, Son dos conceptos distintos. Tu daraReader es el "mecanismo" por el cual obtenes los datos "leyendo", y te sirve para cargar un objeto que pueda ser utilizado como un origen de datos, por ejemplo un List<tuClase>.

    Saludos


    MariaNET
    jueves, 21 de abril de 2011 5:07
  • Puedes llenar datos a tu dataGridView usando varias tecnicas, entre ellas:

    Llenar con dataTable:

    da.fill(tuDataTable)

    me.dgvDatos.DataSource=tuDataTable

     

    Llenar con DataSet:

    da.fill(dst.Tables(0))

    me.dgvDatos.DataSource=dst.tables(0)

     

    LLenar con Listas Genericas y usando el metodo Load de tu datatable.

     

    Hay varias formas, creo q debieras analizar cual forma es mejor que otra, la cantidad de datos, tiempo de respuesta.

    SALUDOS.

     


    Programador .NET - Desarrollador 5 Estrellas.
    viernes, 22 de abril de 2011 16:39
  • No, puesto que un datareader proporciona una forma de leer una secuencia de filas sólo hacia delante en una base de datos de SQL Server, retornando los valores un record a la vez, por lo que si establece la propiedad datasource de la grilla este tomara una sola fila del reader y el control mostrara un solo record, siempre y cuando haya llamado el metodo Read() del reader para posicionar el cursor.

    Ademas la clase DataGridView admite el modelo de enlace de datos estándar de formularios Windows Forms. Esto significa que el origen de datos puede ser de cualquier tipo que implemente una de las interfaces siguientes:

    • La interfaz IList, incluidas las matrices unidimensionales.

    • La interfaz IListSource, como las clases DataTable y DataSet.

    • La interfaz IBindingList, como la clase BindingList<(Of <(T>)>).

    • La interfaz IBindingListView, como la clase BindingSource

    Ver Ejemplo

    public static List<MyData> LeeRelacion1(DateTime date)
        {
          #region DataReader
          using (SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["ConectionStringName"].ConnectionString))
          {
            using (SqlCommand command = new SqlCommand("ProcedureName", connection))
            {
              command.CommandType = CommandType.StoredProcedure;
    
              command.Parameters.AddWithValue("@ParameterName", date);
    
              connection.Open();
    
              List<MyData> list = new List<MyData>();
    
              using (SqlDataReader reader = command.ExecuteReader())
              {
                while (reader.Read())
                {
                  if (reader.HasRows)
                  {
                    MyData temp = new MyData
                      (
                    (int)reader[0],
                    (DateTime)reader[1],
                    (string)reader[2],
                    (int)reader[3],
                    (int)reader[4],
                    (int)reader[5],
                    (string)reader[6],
                    (string)reader[7]
                    );
    
                    list.Add(temp);
                  }
    
                }
              }
              return list;
            }
          } 
          #endregion
        }

     

     


    Angel R. Jimenez G.
    Software Development
    Santo Domingo
    Republica Dominicana
    viernes, 22 de abril de 2011 17:13