Principales respuestas
Rellenar un datagridview ASP.NET WEB

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();
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
-
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
-
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
-
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
-
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
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
-
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
-
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
-
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
-
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
-