Foros del Web » Programación para mayores de 30 ;) » .NET »

guardar gridview en base de datos

Estas en el tema de guardar gridview en base de datos en el foro de .NET en Foros del Web. Hola mis amigos, como les va, aqui estoy nuevamente requiriendo de sus savios consejos y conosimientos, esta vez necesito guardar los datos de un gridview ...
  #1 (permalink)  
Antiguo 05/01/2011, 17:54
 
Fecha de Ingreso: enero-2011
Ubicación: Concepción
Mensajes: 26
Antigüedad: 13 años, 3 meses
Puntos: 0
guardar gridview en base de datos

Hola mis amigos, como les va, aqui estoy nuevamente requiriendo de sus savios consejos y conosimientos, esta vez necesito guardar los datos de un gridview en una base de datos, este gridview esta previamente cargado con datos de un excel el cual cargo en mi web, entonces despues de hacer eso con un boton guardar envio esta información para que se guarde en la base de datos, e estado investigando y e encontrado que lo que guardo no es exactamente el gridview si no que la tabla de donde saco la información para el gridview pero no c como acceder a esa tabla o si es posible hacerlo de un boton aparte del boton con el que cargo el excel al gridview, si alguien me pudiera guiar en cuanto a esto o mejor aun darme alguna otra idea seria genial un saludo y gracias de antemano

Última edición por cuervo_odin; 05/01/2011 a las 18:00
  #2 (permalink)  
Antiguo 05/01/2011, 21:20
Avatar de Aquaventus  
Fecha de Ingreso: junio-2010
Ubicación: Lima-Peru , En el alba de la naturaleza
Mensajes: 2.105
Antigüedad: 13 años, 10 meses
Puntos: 267
Respuesta: guardar gridview en base de datos

lo tendrias que recorrer con un for la tabla que almacena el gridview por filas y columnas... ahora ando por descansar... te paso el code mañana por la mañana. Saludos!.
__________________
Internet es tener todo el conocimiento global a tu disposición.
Desarrollo de Software - Ejemplos .Net
  #3 (permalink)  
Antiguo 06/01/2011, 06:44
Avatar de Porlachucha  
Fecha de Ingreso: noviembre-2008
Ubicación: Santiago
Mensajes: 172
Antigüedad: 15 años, 5 meses
Puntos: 5
Respuesta: guardar gridview en base de datos

un for no es lo mas recomendado, porque tienes que controlar en forma independiente la cantidad de registros. mejor usas un foreach de esta forma

foreach (DataGridViewRow dgvNombreDeTuDataGridViewRow in dgvNombreDelDataGridView.Rows)
{
string sValorColumna0 = dgvNombreDeTuDataGridViewRow.Cells[0].Value.ToString().Trim();
string sValorColumna1 = dgvNombreDeTuDataGridViewRow.Cells[1].Value.ToString().Trim();
string sValorColumna2 = dgvNombreDeTuDataGridViewRow.Cells[2].Value.ToString().Trim();

// guardas el registro en la BD con un insert. esto depende de los datos que necesitas guardar
}

plch
__________________
Nada mas patetico que "detestar" a Intel o Microsoft o Windows o Apple ... apuesto que eres el tipico teton espinilluo y pajero que usa Linux para sentirse capo ...
  #4 (permalink)  
Antiguo 06/01/2011, 10:10
 
Fecha de Ingreso: enero-2011
Ubicación: Concepción
Mensajes: 26
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: guardar gridview en base de datos

mmmm, interesantes respuestas, las provara y les aviso que tal gracia por su ayuda, un saludo ;D

PD: = de todas formas no estaria de mas q me pasaras el codigo que decias Aquaventus :D
  #5 (permalink)  
Antiguo 06/01/2011, 10:21
 
Fecha de Ingreso: enero-2011
Ubicación: Concepción
Mensajes: 26
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: guardar gridview en base de datos

otra duda que surge aparte de lo que pregunte en este post, en el mismo proyecto en el que estoy trabajando tengo dos dropdownlist que se me cargan con el numero de filas de un gridview entonces selecciono un numero de fila apreto un boton de edición para cambiar de color la fila selexionada en el dropdownlist con esto no tengo problema alguno, de echo creo q mi duda es bastante elemental pero por mi inexperiencia no puedo verla con claridad, el asunto es que se mecarga el dropdownlist en el page_load de mi proyecto entonce la primera vez no tengo problema me carga bien pero al momento de selexionar el numero y apretar el boton para que la fila cambie de color los numeros en el dopdownlist se me repiten,es decir, si mis numero fueran 012 la primera vez que se carga entonces despues de hacer el cambio del color queda 012012 y c siguen repitiendo cada vez que hago la edición de color, este es el codigo que uso para llenar el dropdownlist:

protected void Page_Load(object sender, EventArgs e)
{
for(int i=0; i<GridView1.Rows.Count; i++)
{
DropDownList1.Items.Add(new ListItem(i.ToString(),i.ToString()));
DropDownList2.Items.Add(new ListItem(i.ToString(), i.ToString()));

}

}

estaba pensando que tal vez sea porque cuando se cambia de color la pagina se recarga y se reejecuta el load, no c si alguien puede iluminarme con su conosimiento en eso,m le estaria muy agradecido, un saludo ;D
  #6 (permalink)  
Antiguo 06/01/2011, 12:37
Avatar de Porlachucha  
Fecha de Ingreso: noviembre-2008
Ubicación: Santiago
Mensajes: 172
Antigüedad: 15 años, 5 meses
Puntos: 5
Respuesta: guardar gridview en base de datos

probablemente la variable DropDownList1 que estas usando para almacenar dicho numero, la tienes definida en un ambito en el cual los 2 procesos la pueden ver. esto provoca que el contenido de la variable nunca de inicialize.
Intenta esquematizar mejor tu codigo. las funciones que manipulan una variable local no deben leer datos de una aplicacoipn a nivel general, porque precisamente se producen estos problemas que se conocen como problemas de alcance.

plch
__________________
Nada mas patetico que "detestar" a Intel o Microsoft o Windows o Apple ... apuesto que eres el tipico teton espinilluo y pajero que usa Linux para sentirse capo ...
  #7 (permalink)  
Antiguo 06/01/2011, 14:26
 
Fecha de Ingreso: enero-2011
Ubicación: Concepción
Mensajes: 26
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: guardar gridview en base de datos

hola denuevo, estoy probando la idea que me diste Porlachucha pero no entiendo muy bien el foreach, me podrias dar otro ejemplo con gridview que no entiendo que es lo q hay q poner despues del in, osea lo hago como lo pones en la explicación que m diste, pero me dice que DataGrid1.Rows no contiene una definición rows o algo asi.....TT
  #8 (permalink)  
Antiguo 06/01/2011, 14:52
Avatar de Porlachucha  
Fecha de Ingreso: noviembre-2008
Ubicación: Santiago
Mensajes: 172
Antigüedad: 15 años, 5 meses
Puntos: 5
Respuesta: guardar gridview en base de datos

el objeto (el que dibujas en el form), es un datagridview (es un grid en .net 2005, 2008... etc)
el foreach tiene 2 elementos que componen el ciclo.

el primero del tipo DataGridViewRow. Lo puedes nombrar como tu quieras. en este caso de ejemplo yo le puse dgvNombreDeTuDataGridViewRow.

despues de la clausula in, viene el nombre del objeto datagridview que dibujaste en el formulario. cuando lo dibujas le debes dar un nombre, el que por defecto es DataGridView1 yo aca le puse dgvNombreDelDataGridView. este objeto, tiene una coleccion que se llama Rows.

lo que hace este codigo, es que por cada fila del datagridview, toma su contenido y lo almacena en un objeto nuevo del tipo DataGridViewRow. este objeto dentro del ciclo contiene la informacion de la fila completa, al cual puedes obtener segun la vayas necesitando.
este ciclo se repite tantas veces como filas existan en el datagridview.


este objeto datagridview, por lo general lo usas enlazado con un datatable mediante la propiedad datasource, o databinding.

Saludos
plch
__________________
Nada mas patetico que "detestar" a Intel o Microsoft o Windows o Apple ... apuesto que eres el tipico teton espinilluo y pajero que usa Linux para sentirse capo ...
  #9 (permalink)  
Antiguo 06/01/2011, 16:43
 
Fecha de Ingreso: enero-2011
Ubicación: Concepción
Mensajes: 26
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: guardar gridview en base de datos

bueno, despues de leer detenidamente tu respuesta y de investigar otro poco por mi lado por fin pude hacer que no me diera error el foreach, e intente comprobar que se guardaba correctamente la información entonce puse un label en donde supuestamente apareseria la información que se guardo en la variable:

foreach (GridViewRow grid in GridView1.Rows)
{
string sValorColumna0 = GridView1.Rows[0].ToString();
string sValorColumna1 = GridView1.Rows[1].ToString();
string sValorColumna2 = GridView1.Rows[2].ToString();
Label1.Text = sValorColumna0;


}

y al ejecutarlo no me da error pero ocurre algo,digamos, curioso...en vez de apareserme en el label lo q supuestamente esta en la primera fila de mi grid me aparese esto:

System.Web.UI.WebControls.GridViewRow

que quiere decir eso?....lo estoy haciendo mal ?

un saludo ;D
  #10 (permalink)  
Antiguo 06/01/2011, 18:52
Avatar de Porlachucha  
Fecha de Ingreso: noviembre-2008
Ubicación: Santiago
Mensajes: 172
Antigüedad: 15 años, 5 meses
Puntos: 5
Respuesta: guardar gridview en base de datos

Compadre, tu codigo esta erroneo. tu pones
string sValorColumna0 = GridView1.Rows[0].ToString();
debe ser
string sValorColumna0 = GridView1.Cells[0].Value.ToString().Trim();

prueba y me comentas como te va
plch
__________________
Nada mas patetico que "detestar" a Intel o Microsoft o Windows o Apple ... apuesto que eres el tipico teton espinilluo y pajero que usa Linux para sentirse capo ...
  #11 (permalink)  
Antiguo 07/01/2011, 12:14
 
Fecha de Ingreso: enero-2011
Ubicación: Concepción
Mensajes: 26
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: guardar gridview en base de datos

bueno, probando y probando llegue a algo q podria considerarse medio aceptable:

protected void Button1_Click(object sender, EventArgs e)
{
foreach (GridViewRow grid in GridView1.Rows)
{


string sValorColumna0 = GridView1.Rows[0].Cells[0].Text.ToString().Trim();
string sValorColumna1 = GridView1.Rows[0].Cells[1].Text.ToString().Trim();
string sValorColumna2 = GridView1.Rows[0].Cells[2].Text.ToString().Trim();
Label1.Text = sValorColumna0;


}

}

ahora ,el label1 q aparese hay es solo para comprobar que de verdad me guarda la fila en la variable asignada, y lo hace, me muestra lo q esta en la fila, pero solo lo q esta en la celda 0 de la fila 0.
ahora el problema es como lo hago para q me funcione con cualquier grid.
PD: prove el dato que me diste Porlachucha, pero me da este error

CS1061: 'System.Web.UI.WebControls.GridView' no contiene una definición de 'Cells' ni se encontró ningún método de extensión 'Cells' que acepte un primer argumento de tipo 'System.Web.UI.WebControls.GridView' (¿falta una directiva using o una referencia de ensamblado?)

un saludo ;D
  #12 (permalink)  
Antiguo 08/01/2011, 15:04
Avatar de Porlachucha  
Fecha de Ingreso: noviembre-2008
Ubicación: Santiago
Mensajes: 172
Antigüedad: 15 años, 5 meses
Puntos: 5
Respuesta: guardar gridview en base de datos

viejito.. es porque estas haciendo referencia a la Row[0]...

fila en ingles se dice Row. si quitas eso de la linea, vas a recorrer todas las filas que tiene el grid
__________________
Nada mas patetico que "detestar" a Intel o Microsoft o Windows o Apple ... apuesto que eres el tipico teton espinilluo y pajero que usa Linux para sentirse capo ...
  #13 (permalink)  
Antiguo 08/01/2011, 16:41
 
Fecha de Ingreso: enero-2011
Ubicación: Concepción
Mensajes: 26
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: guardar gridview en base de datos

hola a todos, que tal, aqui estoy nuevamente requiriendo de vuestra guía y conocimientos, estoy casi en un 100% con este asunto de guardar el grid en la base de datos, lo unico esq me da un error de conversión de tipo de dato al momento de guardar en la base de datos, se que lña logica que uso esta bien porq la use con una aplicación similar y funciono, el problema que en ese caso no use el tipo de dato q me da problema, bueno se los explico para que me entiendan mejor:

tengo un archivo excel con un grupo de datos entre los cuales tengo hora inicio y hora fin los cuales obviamente solo tienen una hora x, el excel lo cargo a un gridview desde una pagina web, hasta hay ningun problema ,me lo carga perfectamente pero el problema que los campos que mensione anteriormente ( inicio y fin ) me aparesen con fecha y hora (ej: 30-12-1899 8:00:00) y yo solo necesito la hora y al momento de guardar este gridview me da el siguiente error:

The conversion of a varchar data type to a datetime data type resulted in an out-of-range value. The statement has been terminated.

se que el problema esta al momento de hacer la conversión de tipo de dato an la base de datos, mi codigo para guardar es el siguiente:

string SqlString = ""; // variable a la que asignaremos la sentencia
ArrayList ListSqlStrings = new ArrayList(); //arregla donde ingresaremos las sentencias
//recorremos el datagrid como ya sabemos siempre se toma desde cero
for (int i = 0; i < GridView1.Rows.Count; i++)
{
SqlCommand cm = new SqlCommand();
SqlString = "INSERT INTO horarios (nivel,ramo,inicio,fin,profesor,sala,día) VALUES('" + GridView1.Rows[i].Cells[0].Text.ToString() +
"','" + GridView1.Rows[i].Cells[1].Text.ToString() +
"','" + GridView1.Rows[i].Cells[2].Text.ToString() +
"','" + GridView1.Rows[i].Cells[3].Text.ToString() +
"','" + GridView1.Rows[i].Cells[4].Text.ToString() +
"','" + GridView1.Rows[i].Cells[5].Text.ToString() +
"','" + GridView1.Rows[i].Cells[6].Text.ToString() + "')";

ListSqlStrings.Add(SqlString);

intente cambiando el formato antes de guardarlo en la base de datos de la siguiente forma:

SqlParameter nivel = cm.Parameters.Add(GridView1.Rows[i].Cells[0].Text.ToString(), SqlDbType.NChar);
SqlParameter ramo = cm.Parameters.Add(GridView1.Rows[i].Cells[1].Text.ToString(), SqlDbType.NVarChar);
SqlParameter inicio = cm.Parameters.Add(GridView1.Rows[i].Cells[2].Text.ToString(), SqlDbType.Time);
SqlParameter fin = cm.Parameters.Add(GridView1.Rows[i].Cells[3].Text.ToString(), SqlDbType.Time);
SqlParameter profesor = cm.Parameters.Add(GridView1.Rows[i].Cells[4].Text.ToString(), SqlDbType.NVarChar);
SqlParameter sala = cm.Parameters.Add(GridView1.Rows[i].Cells[5].Text.ToString(), SqlDbType.NVarChar);
SqlParameter día = cm.Parameters.Add(GridView1.Rows[i].Cells[6].Text.ToString(), SqlDbType.NVarChar);

pero aun asi me da el mismo error, alguna sugerencia?, se puede cambiar el tipo de dato altiro en exel para que solo pesque la hora y no las fechas o se puede hacer despues al momento de mostrarlo en el gridview, agradesco cualquier aporte, gracias y un saludo de antemano ;D
  #14 (permalink)  
Antiguo 08/01/2011, 17:49
Avatar de Aquaventus  
Fecha de Ingreso: junio-2010
Ubicación: Lima-Peru , En el alba de la naturaleza
Mensajes: 2.105
Antigüedad: 13 años, 10 meses
Puntos: 267
Respuesta: guardar gridview en base de datos

si inicio y fin son fechas entonces tendrias que hacer esto:

Código c#:
Ver original
  1. SqlString = "INSERT INTO horarios (nivel,ramo,inicio,fin,profesor,sala,día) VALUES('" + GridView1.Rows[i].Cells[0].Text.ToString() +
  2. "','" + GridView1.Rows[i].Cells[1].Text.ToString() +
  3. "','" + Convert.toDatetime(GridView1.Rows[i].Cells[2].Text.ToString()) +
  4. "','" + Convert.toDatetime(GridView1.Rows[i].Cells[3].Text.ToString()) +
  5. "','" + GridView1.Rows[i].Cells[4].Text.ToString() +
  6. "','" + GridView1.Rows[i].Cells[5].Text.ToString() +
  7. "','" + GridView1.Rows[i].Cells[6].Text.ToString() + "')";
__________________
Internet es tener todo el conocimiento global a tu disposición.
Desarrollo de Software - Ejemplos .Net
  #15 (permalink)  
Antiguo 08/01/2011, 19:58
 
Fecha de Ingreso: enero-2011
Ubicación: Concepción
Mensajes: 26
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: guardar gridview en base de datos

creo q no me exprese bien, tengo un excel en el escritorio con varios campos entre los cuales tengo dos campos de hora (inicio y fin) el problema que tengo es que cuando muestro el excel en el gridview los campos inicio y fin me aparesen con fecha y hora y yo quiero que solo aparesca la hora, y despues cuando intento guardarlo en la base de datos me da el error de converción q mencione antes, un saludo.
  #16 (permalink)  
Antiguo 08/01/2011, 21:57
Avatar de Aquaventus  
Fecha de Ingreso: junio-2010
Ubicación: Lima-Peru , En el alba de la naturaleza
Mensajes: 2.105
Antigüedad: 13 años, 10 meses
Puntos: 267
Respuesta: guardar gridview en base de datos

Pues creo que no hay otra que remover el campo fecha, que seria asi :

Código c#:
Ver original
  1. SqlParameter nivel = cm.Parameters.Add(GridView1.Rows[i].Cells[0].Text.ToString(), SqlDbType.NChar);
  2. SqlParameter ramo = cm.Parameters.Add(GridView1.Rows[i].Cells[1].Text.ToString(), SqlDbType.NVarChar);
  3. SqlParameter inicio = cm.Parameters.Add(GridView1.Rows[i].Cells[2].Text.Remove(0, 10).Trim(), SqlDbType.Time);
  4. SqlParameter fin = cm.Parameters.Add(GridView1.Rows[i].Cells[3].Text.Remove(0, 10).Trim(), SqlDbType.Time);
  5. SqlParameter profesor = cm.Parameters.Add(GridView1.Rows[i].Cells[4].Text.ToString(), SqlDbType.NVarChar);
  6. SqlParameter sala = cm.Parameters.Add(GridView1.Rows[i].Cells[5].Text.ToString(), SqlDbType.NVarChar);
  7. SqlParameter d&#237;a = cm.Parameters.Add(GridView1.Rows[i].Cells[6].Text.ToString(), SqlDbType.NVarChar);

Intenta asi, probablemente haya mejores soluciones y espero que la posteen pero por mientras talvez iria asi, pruebalo y me comentas. Saludos
__________________
Internet es tener todo el conocimiento global a tu disposición.
Desarrollo de Software - Ejemplos .Net
  #17 (permalink)  
Antiguo 09/01/2011, 14:09
 
Fecha de Ingreso: enero-2011
Ubicación: Concepción
Mensajes: 26
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: guardar gridview en base de datos

PROBLEMA SOLUCIONADO!!!!

simplemente defini el AutoGenerateColumns de mi gridview como false y despues le agregue las columnas necesarias y les di un formato predefinido, en este caso para la hora fue {0:hh:mm} y listo, despues en la base de datos defini todas las variables de la tabla como nvarchar y listo ME LOS GUARDA TODOS !!!!! XD

ahora el unico problema que tengo es con los acentos en la base de datos por ejemplo titulación me aparese como titulación

estoy investigando pero obviamente si alguien me pudiera explicar porq pasa y como arreglarlo se lo agradeseria enormemente, un saludo y grax por vuestro tiempo y consejos q vastante me han servido XD ;D

Etiquetas: gridview
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:36.