none
Rellenar un datagridview ASP.NET WEB RRS feed

  • Pregunta

  • Buenos días a todos,

    Tengo una APP que necesito rellenar un DataGridView y no entiendo que me falta en el código que tengo que no me saca nada en las líneas del DataGrid.

    Os agradecería me pudierais indicar donde tengo el fallo.

    En el DataGrid ya existen las columnas con los nombres predefinidos.

    Espero noticias vuestras.

    Un saludo y gracias

    Miguel

      DataTable dt = new DataTable();
                dt.Columns.AddRange(new DataColumn[4] { new DataColumn("Fecha", typeof(int)),
                                new DataColumn("Nombre y Apellidos", typeof(string)),
                                new DataColumn("Tipo",typeof(string)),
                                new DataColumn("Horas",typeof(string))});
    
                foreach (WebETTWelington.WSAssistantOrderLine.WSAssistantOrderLine Dat in RecCuentas)
                {
    
                    dt.Rows.Add(1, "12/12/2017");
                    dt.Rows.Add(2, "Jesus Corona", "México");
                    dt.Rows.Add(3, "2");
                    dt.Rows.Add(4, "15");
    
                    dt.Rows.Add(1, Dat.Service_Date);
                    dt.Rows.Add(2, Dat.Name);
                    dt.Rows.Add(3, Dat.Type);
                    dt.Rows.Add(4, Dat.Total_Hours);
                   
                }
                //  WSAssistantOrderLine.()
    
                // Para rellenar el Grid es el ASS
                GridDatos.DataSource = dt;
                GridDatos.DataBind();

    martes, 19 de diciembre de 2017 10:44

Respuestas

  • hola

    >>Tengo una APP que necesito rellenar un DataGridView

    el datagridview es winform, lo que usas en asp.net es el GridView

    >>no entiendo que me falta en el código que tengo que no me saca nada en las líneas del DataGrid.

    lo que veo incorrecto es como creas las columnas del datatable

    foreach (WebETTWelington.WSAssistantOrderLine.WSAssistantOrderLine Dat in RecCuentas)
    {
    	var row = dt.NewRow();
    
    	dt["Fecha"] = Dat.Service_Date;
    	dt["Nombre y Apellidos"] = Dat.Name;
    	dt["Tipo"] = Dat.Type;
    	dt["Horas"] = Dat.Total_Hours;
    	
    	dt.Rows.Add(row);
    }

    Nota: cambia el nombre de la columna "Nombre y Apellidos" no pongas espacio en el nombre

    Ademas de donde sale RecCuentas ? estas seguro que tiene items que recorrer, si pones un breakpoint en el codigo ingresa al foreach

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Propuesto como respuesta Pablo RubioModerator martes, 19 de diciembre de 2017 17:11
    • Marcado como respuesta MiguelVB miércoles, 20 de diciembre de 2017 15:03
    martes, 19 de diciembre de 2017 13:26
  • Podrías realizar lo siguiente y primero probar que todo te funcione bien.

    1- Crea una pagina nueva de prueba en la cual lo único que agregaras sera una gridview para asp.net la cual dejaras en blanco.

    2- lo siguiente sera cargarle datos de prueba a la grilla la cual agregaras el código en el page_load debera quedar algo asi.

     protected void Page_Load(object sender, EventArgs e)
            {
                DataTable tabla1 = new DataTable();
                tabla1.Columns.Add("Fecha", typeof(DateTime));
                tabla1.Columns.Add("NombreyApellidos", typeof(string));
                tabla1.Columns.Add("Tipo", typeof(string));
                tabla1.Columns.Add("Horas", typeof(DateTime));
    
                tabla1.Rows.Add(DateTime.Now, "Nombre de Prueba", "Persona", DateTime.Now);
                tabla1.Rows.Add(DateTime.Now, "Nombre de Prueba 2", "Persona", DateTime.Now);
    
                GridView1.DataSource = tabla1;
                GridView1.DataBind();
            }

    y el resultado seria el siguiente

    3- lo siguiente seria saber que tipos de datos y la forma en la cual retorna los datos suponiendo que los datos retornan de forma correcta deberia quedar algo asi.

     protected void Page_Load(object sender, EventArgs e)
            {
                DataTable tabla1 = new DataTable();
                tabla1.Columns.Add("Fecha", typeof(DateTime));
                tabla1.Columns.Add("NombreyApellidos", typeof(string));
                tabla1.Columns.Add("Tipo", typeof(string));
                tabla1.Columns.Add("Horas", typeof(DateTime));//puedes cambiar al tipo de dato correcto si es entero el valor
    
    
                foreach (WebETTWelington.WSAssistantOrderLine.WSAssistantOrderLine Dat in RecCuentas)
                {
                    tabla1.Rows.Add(Dat.Service_Date, Dat.Name,Dat.Type,Dat.Total_Hours);
    
                }
    
                GridView1.DataSource = tabla1;
                GridView1.DataBind();
            }

    4- lo ultimo seria colocar un punto de interrupción en el foreach y tabla1.Rows.Add para verificar que los datos se estén cargando de forma correcta y no devuelvan valores nulos o tipos de datos no compatibles.

    Espero te sirva de ayuda.

    Saludos



    • Editado osrol miércoles, 20 de diciembre de 2017 12:35
    • Marcado como respuesta MiguelVB miércoles, 20 de diciembre de 2017 15:03
    miércoles, 20 de diciembre de 2017 12:29
  • Hola Leandro,

    Perdona pero es un System.web.Ui.webcontrols DataGrid.

    He puesto lo que me has indicado y me da el error de que "no se puede aplicar la indización con []a una expresión del tipo data Table".

    RecCuentas sale de una llamada a un servicio web que me devuelve una lista de datos a mostrar en el DataGrid, tal y como te incluyo en el codigo

    Me puedes decir como resolver esto, por favor.

    El código ha quedado asi:

      WebETTWelington.WSAssistantOrderLine.WSAssistantOrderLine[] RecCuentas = CliCuentas.ReadMultiple(Cuentas, bookmarkkey, SetSize);
            
                if (RecCuentas.Length <= 0)
                {
                    lblError.Text = "No existen datos de servicios..";
                    lblError.Visible = true;
                    return;
                }
                DataTable dt = new DataTable();
                dt.Columns.AddRange(new DataColumn[4] { new DataColumn("Fecha", typeof(int)),
                                new DataColumn("NombreyApellidos", typeof(string)),
                                new DataColumn("Tipo",typeof(string)),
                                new DataColumn("Horas",typeof(string))});
    
                foreach (WebETTWelington.WSAssistantOrderLine.WSAssistantOrderLine Dat in RecCuentas)
                {
                    var row = dt.NewRow();
    
                    dt["Fecha"] = Dat.Service_Date;
                    dt["NombreyApellidos"] = Dat.Name;
                    dt["Tipo"] = Dat.Type;
                    dt["Horas"] = Dat.Total_Hours;
    
                    dt.Rows.Add(row);
                }
                //  WSAssistantOrderLine.()
    
                // Para rellenar el Grid es el ASS
                GridDatos.DataSource = dt;
                GridDatos.DataBind();

    • Marcado como respuesta MiguelVB miércoles, 20 de diciembre de 2017 15:03
    martes, 19 de diciembre de 2017 16:25
  • Hola Leandro,

    En estos momentos y, tras ver varias opciones en internet, tengo el código que te adjunto y para estar seguro de que existen datos, al recorrer la Data Table puedo comprobar que hay datos en ella y al recorrer el DataGrid he podido comprobar que no tiene nada, que sus valores son blancos.

    Podrías decirme donde tengo el error para que el dataGrid no se me rellene, por favor.

    Espero noticias.

    Un saludo y gracias

    Miguel

     WebETTWelington.WSAssistantOrderLine.WSAssistantOrderLine[] RecCuentas = CliCuentas.ReadMultiple(Cuentas, bookmarkkey, SetSize);
            
                if (RecCuentas.Length <= 0)
                {
                    lblError.Text = "No existen datos de servicios..";
                    lblError.Visible = true;
                    return;
                }
    
                DataTable dt = new DataTable("GridDatos");
                dt.Columns.AddRange(new DataColumn[4] { new DataColumn("Fecha", typeof(DateTime)),
                                new DataColumn("Nombre y Apellidos", typeof(string)),
                                new DataColumn("Tipo",typeof(string)),
                                new DataColumn("Horas",typeof(decimal))});
               
    
                foreach (WebETTWelington.WSAssistantOrderLine.WSAssistantOrderLine Dat in RecCuentas)
                {
                    DataRow blankRow = dt.NewRow();
                    blankRow["Fecha"] = Dat.Service_Date;
                    blankRow["Nombre y Apellidos"] = Dat.Name;
                    blankRow["Tipo"] = Dat.Type;
                    blankRow["Horas"] = Dat.Total_Hours;
                    dt.Rows.Add(blankRow);
                }
                //  WSAssistantOrderLine.()
    
                // Para rellenar el Grid es el ASS
                GridDatos.DataSource = dt;
                GridDatos.DataBind();
                foreach (DataRow row in dt.Rows)
                {
                    lblError.Text = "Estos osn los datos.. " + row[0] + " - " + row[1] + " - " + row[2] + " - " + row[3];
                }
    
    
                for (int i = 0; i < GridDatos.Items.Count; i++)
                {
                    for (int j = 0; j < GridDatos.Items[i].Cells.Count; j++)
                    {
                        string valor = GridDatos.Items[i].Cells[j].Text;
                    }
                }
    
            }

    • Marcado como respuesta MiguelVB miércoles, 20 de diciembre de 2017 15:03
    miércoles, 20 de diciembre de 2017 9:26
  • Hola Osrol,

    Me ha funcionado correctamente.

    Muchísimas gracias por tu colaboración y aportación.

    Un saludo y gracias

    Os deseo a todos Felices Fiestas navideñas y un prospero nuevo año 2018.

    • Marcado como respuesta MiguelVB miércoles, 20 de diciembre de 2017 15:03
    miércoles, 20 de diciembre de 2017 15:03

Todas las respuestas

  • hola

    >>Tengo una APP que necesito rellenar un DataGridView

    el datagridview es winform, lo que usas en asp.net es el GridView

    >>no entiendo que me falta en el código que tengo que no me saca nada en las líneas del DataGrid.

    lo que veo incorrecto es como creas las columnas del datatable

    foreach (WebETTWelington.WSAssistantOrderLine.WSAssistantOrderLine Dat in RecCuentas)
    {
    	var row = dt.NewRow();
    
    	dt["Fecha"] = Dat.Service_Date;
    	dt["Nombre y Apellidos"] = Dat.Name;
    	dt["Tipo"] = Dat.Type;
    	dt["Horas"] = Dat.Total_Hours;
    	
    	dt.Rows.Add(row);
    }

    Nota: cambia el nombre de la columna "Nombre y Apellidos" no pongas espacio en el nombre

    Ademas de donde sale RecCuentas ? estas seguro que tiene items que recorrer, si pones un breakpoint en el codigo ingresa al foreach

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Propuesto como respuesta Pablo RubioModerator martes, 19 de diciembre de 2017 17:11
    • Marcado como respuesta MiguelVB miércoles, 20 de diciembre de 2017 15:03
    martes, 19 de diciembre de 2017 13:26
  • Hola Leandro,

    Perdona pero es un System.web.Ui.webcontrols DataGrid.

    He puesto lo que me has indicado y me da el error de que "no se puede aplicar la indización con []a una expresión del tipo data Table".

    RecCuentas sale de una llamada a un servicio web que me devuelve una lista de datos a mostrar en el DataGrid, tal y como te incluyo en el codigo

    Me puedes decir como resolver esto, por favor.

    El código ha quedado asi:

      WebETTWelington.WSAssistantOrderLine.WSAssistantOrderLine[] RecCuentas = CliCuentas.ReadMultiple(Cuentas, bookmarkkey, SetSize);
            
                if (RecCuentas.Length <= 0)
                {
                    lblError.Text = "No existen datos de servicios..";
                    lblError.Visible = true;
                    return;
                }
                DataTable dt = new DataTable();
                dt.Columns.AddRange(new DataColumn[4] { new DataColumn("Fecha", typeof(int)),
                                new DataColumn("NombreyApellidos", typeof(string)),
                                new DataColumn("Tipo",typeof(string)),
                                new DataColumn("Horas",typeof(string))});
    
                foreach (WebETTWelington.WSAssistantOrderLine.WSAssistantOrderLine Dat in RecCuentas)
                {
                    var row = dt.NewRow();
    
                    dt["Fecha"] = Dat.Service_Date;
                    dt["NombreyApellidos"] = Dat.Name;
                    dt["Tipo"] = Dat.Type;
                    dt["Horas"] = Dat.Total_Hours;
    
                    dt.Rows.Add(row);
                }
                //  WSAssistantOrderLine.()
    
                // Para rellenar el Grid es el ASS
                GridDatos.DataSource = dt;
                GridDatos.DataBind();

    • Marcado como respuesta MiguelVB miércoles, 20 de diciembre de 2017 15:03
    martes, 19 de diciembre de 2017 16:25
  • Hola Leandro,

    En estos momentos y, tras ver varias opciones en internet, tengo el código que te adjunto y para estar seguro de que existen datos, al recorrer la Data Table puedo comprobar que hay datos en ella y al recorrer el DataGrid he podido comprobar que no tiene nada, que sus valores son blancos.

    Podrías decirme donde tengo el error para que el dataGrid no se me rellene, por favor.

    Espero noticias.

    Un saludo y gracias

    Miguel

     WebETTWelington.WSAssistantOrderLine.WSAssistantOrderLine[] RecCuentas = CliCuentas.ReadMultiple(Cuentas, bookmarkkey, SetSize);
            
                if (RecCuentas.Length <= 0)
                {
                    lblError.Text = "No existen datos de servicios..";
                    lblError.Visible = true;
                    return;
                }
    
                DataTable dt = new DataTable("GridDatos");
                dt.Columns.AddRange(new DataColumn[4] { new DataColumn("Fecha", typeof(DateTime)),
                                new DataColumn("Nombre y Apellidos", typeof(string)),
                                new DataColumn("Tipo",typeof(string)),
                                new DataColumn("Horas",typeof(decimal))});
               
    
                foreach (WebETTWelington.WSAssistantOrderLine.WSAssistantOrderLine Dat in RecCuentas)
                {
                    DataRow blankRow = dt.NewRow();
                    blankRow["Fecha"] = Dat.Service_Date;
                    blankRow["Nombre y Apellidos"] = Dat.Name;
                    blankRow["Tipo"] = Dat.Type;
                    blankRow["Horas"] = Dat.Total_Hours;
                    dt.Rows.Add(blankRow);
                }
                //  WSAssistantOrderLine.()
    
                // Para rellenar el Grid es el ASS
                GridDatos.DataSource = dt;
                GridDatos.DataBind();
                foreach (DataRow row in dt.Rows)
                {
                    lblError.Text = "Estos osn los datos.. " + row[0] + " - " + row[1] + " - " + row[2] + " - " + row[3];
                }
    
    
                for (int i = 0; i < GridDatos.Items.Count; i++)
                {
                    for (int j = 0; j < GridDatos.Items[i].Cells.Count; j++)
                    {
                        string valor = GridDatos.Items[i].Cells[j].Text;
                    }
                }
    
            }

    • Marcado como respuesta MiguelVB miércoles, 20 de diciembre de 2017 15:03
    miércoles, 20 de diciembre de 2017 9:26
  • Podrías realizar lo siguiente y primero probar que todo te funcione bien.

    1- Crea una pagina nueva de prueba en la cual lo único que agregaras sera una gridview para asp.net la cual dejaras en blanco.

    2- lo siguiente sera cargarle datos de prueba a la grilla la cual agregaras el código en el page_load debera quedar algo asi.

     protected void Page_Load(object sender, EventArgs e)
            {
                DataTable tabla1 = new DataTable();
                tabla1.Columns.Add("Fecha", typeof(DateTime));
                tabla1.Columns.Add("NombreyApellidos", typeof(string));
                tabla1.Columns.Add("Tipo", typeof(string));
                tabla1.Columns.Add("Horas", typeof(DateTime));
    
                tabla1.Rows.Add(DateTime.Now, "Nombre de Prueba", "Persona", DateTime.Now);
                tabla1.Rows.Add(DateTime.Now, "Nombre de Prueba 2", "Persona", DateTime.Now);
    
                GridView1.DataSource = tabla1;
                GridView1.DataBind();
            }

    y el resultado seria el siguiente

    3- lo siguiente seria saber que tipos de datos y la forma en la cual retorna los datos suponiendo que los datos retornan de forma correcta deberia quedar algo asi.

     protected void Page_Load(object sender, EventArgs e)
            {
                DataTable tabla1 = new DataTable();
                tabla1.Columns.Add("Fecha", typeof(DateTime));
                tabla1.Columns.Add("NombreyApellidos", typeof(string));
                tabla1.Columns.Add("Tipo", typeof(string));
                tabla1.Columns.Add("Horas", typeof(DateTime));//puedes cambiar al tipo de dato correcto si es entero el valor
    
    
                foreach (WebETTWelington.WSAssistantOrderLine.WSAssistantOrderLine Dat in RecCuentas)
                {
                    tabla1.Rows.Add(Dat.Service_Date, Dat.Name,Dat.Type,Dat.Total_Hours);
    
                }
    
                GridView1.DataSource = tabla1;
                GridView1.DataBind();
            }

    4- lo ultimo seria colocar un punto de interrupción en el foreach y tabla1.Rows.Add para verificar que los datos se estén cargando de forma correcta y no devuelvan valores nulos o tipos de datos no compatibles.

    Espero te sirva de ayuda.

    Saludos



    • Editado osrol miércoles, 20 de diciembre de 2017 12:35
    • Marcado como respuesta MiguelVB miércoles, 20 de diciembre de 2017 15:03
    miércoles, 20 de diciembre de 2017 12:29
  • Hola Osrol,

    Me ha funcionado correctamente.

    Muchísimas gracias por tu colaboración y aportación.

    Un saludo y gracias

    Os deseo a todos Felices Fiestas navideñas y un prospero nuevo año 2018.

    • Marcado como respuesta MiguelVB miércoles, 20 de diciembre de 2017 15:03
    miércoles, 20 de diciembre de 2017 15:03
  • Hola, perdona pero se me pasó...

    Puedes indicarme como decirle por código los anchos de cada una de las columnas del DataGrid, por favor.

    Espero me puedas dar esa información

    Un saludo y gracias

    Miguel

    miércoles, 20 de diciembre de 2017 16:14