Visual Basic.NET - Datagrid y valor null al insertar

 
Vista:

Datagrid y valor null al insertar

Publicado por shania (14 intervenciones) el 30/06/2004 10:57:47
Hola a todos!
Tengo un problema cuando quiero insertar datos en una tabla a través de un datagrid. A ver si me explico bien... Tengo una tabla cuya clave primaria es char (5). Dicha clave la obtengo en una función ObtenerClave, el problema es que no sé cómo hacer para asignar esa clave a cada nueva fila que inserto en el dataGrid, pongo un ejemplo,
el usuario está en el datagrid insertando datos, rellena todas las celdas excepto la que se corresponde al código (en la cual aparece un "null") y al pulsar el botón Aceptar (cuyo código es Me.SQLDataAdapter.Update(MiDataSet)) me sale un error: "No puede insertar valores nulos para la clave principal" o algo así.
¿cómo puedo hacer para que no me de este error? He pensado en llamar a la funcion Obtener código y despues hacer el Me.SQLDataAdapter.Update, pero no sé cómo poner el código que me devuelve en la celda correspondiente a la fila que se quiere insertar y, claro, esto se complica si añado 15 registros a la vez, ¿alguna ídea? ¿me estoy complicando mucho? La clave no puede ser autonumérica.

bueno, espero que me podáis ayudar, si alguno ha hecho algo parecido agradecería que enviase el código de manera sencilla.

Muchas gracias.

Un saludo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Datagrid y valor null al insertar

Publicado por Edgar (1501 intervenciones) el 30/06/2004 14:25:54
Hola

Puedes recorrer el DataTable, comparas el valor del campo clave con DbNull, si este campo es nulo (DbNull) ejecutas tu método para obtener la clave, luego podrás actualizar con el Update.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Datagrid y valor null al insertar

Publicado por Shania (14 intervenciones) el 30/06/2004 19:36:39
Hola Edgar!
Ante todo, gracias por ayudarme, pero me ha surgido un problemilla: Al recorrer el DataTable resulta que en él sólo tengo los registros que había en un principio en el DataGrid y en él no se encuentran los nuevos que ha creado el usuario. ¿cómo hago entonces?
Gracias.
Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Datagrid y valor null al insertar

Publicado por Edgar (1501 intervenciones) el 30/06/2004 20:03:58
Hola

Lo mas probable es que te falta ejecutar el método AcceptChanges de la tabla para que se actualzen los datos. Intenta con esto como primera opción. Sino revisa si la fuente de datos es la tabla o una vista... ya que en este caso debes ejecutar el método EndEdit de la misma (el nombre es ese o parecido)

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Datagrid y valor null al insertar

Publicado por shania (14 intervenciones) el 01/07/2004 11:21:08
Hola Edgar!
Te comento, no me funciona el método AcceptChanges, no sé qué se me olvida he probado a actualizar los datos de un millón de formas y nada, yo no uso una vista uso una tabla. Cargo el datagrid del siguiente modo:

SQLDataAdapter (DataSet, "Tabla")

y cuando me salen todos los datos en DataGrid pues quiero introducir uno, cuyo código (clave principal) es nula y claro como tu dices, tengo que recorrer la tabla para que cuando encuentre ese campo a nulo que llame a ObtenerCodigo. Bien, lo he entendido todo, pero no sé cómo hacerlo, más bien, no sé cómo puedo actualizar los datos en mi DataTable para luego recorrerlo. Lo que hago es (bueno uno de tantos modos que he usado):

Me.DataSet.Tables("Tabla").AcceptChanges()
'Bien pues aquí no me actualiza los datos nuevos que tengo en el
'dataGrid

'Para recorrer la tabla del DataSet:
Dim oTabla As DataTable
oTabla = DataSet.Tables("Tabla")
Dim oFila As DataRow
Recorro la tabla
For Each oFila In oTabla.Rows
If oFila("Codigo") = "DBNull" Then
'Llamo a la función ObtenerCodigo
Else
MsgBox(oFila("Codigo").ToString())
End If
Next
Me.SqlDataAdapter.Update(DataSet)

No sé, se me olvida algo, estoy segura, ¿qué es? ¿Tengo que recorrer el DataGrid o algo para actualizar las filas nuevas?

Espero que me puedas ayudar.

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Datagrid y valor null al insertar

Publicado por Shania (14 intervenciones) el 01/07/2004 11:35:45
Hola Edgar!

Bueno, te comento que el AcceptChanges me funciona al borrar y al modificar alguna fila del datagrid, pero no así cuando inserto nuevas filas.
No sé si ésto te podrá ayudar a mí cada vez me deja más perpleja...

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Datagrid y valor null al insertar

Publicado por shania (14 intervenciones) el 01/07/2004 11:50:49
Hola Edgar!
Volviendo a probar cosas se me ha olvidado decirte en la anterior nota que el insertar y el borrar funcionan con este código:

Me.BindingContext(Me.DsRitmas, "Ivas").EndCurrentEdit()
Me.SqlDA_Ivas.Update(Me.DsRitmas, "Ivas")
Me.DsRitmas.Tables("Ivas").AcceptChanges()

'A partir de aquí va el mismo código de antes para recorrer la tabla

Beuno el caso es que así no funciona el insertar y me sale el error: "La columna código no puede tener un valor nulo, desea cambiarlo?"

En fin, a ver si lo puedo solucionar.
Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Datagrid y valor null al insertar

Publicado por Edgar (1501 intervenciones) el 01/07/2004 14:12:55
Hola

Intenta con esto a ver... Crea un DataView, pero de esta manera:

Dim dv as new DataView(Me.DsRitmas.Tables("Ivas"), "","",DataROwViewState.Added)

De esta manera estas creando una vista que debe contener solo las filas añadidas. Actualiza los valores del campo clave en estas y luego ejecutas el método EndEdit de la vista para que los datos se actualizen.

Espero que te pueda servir

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

El dataview no coge ningún valor

Publicado por shania (14 intervenciones) el 01/07/2004 17:24:57
Hola Edgar!
He hecho lo uqe me has dicho y el dataview no me coge ningún valor.
Es decir su dv.count es 0.
¿Porqué no me añade la fila que inserto en el datagrid?
Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:El dataview no coge ningún valor

Publicado por Edgar (1501 intervenciones) el 02/07/2004 14:36:41
Hola

Pues hay que ver si como está agregando los datos en el DataGrid.. enlaza el DataGrid con un DataView, e implementa el evento ListChanged de la vista.

De esta manera cada vez que la vista, este evento se disparará, asi sabrás cuando se agrega, modifica o elimina una fila, por lo que sabrás, en primer lugar, si se está agregando, y en segundo lugar, si por alguna razón extraña, se está eliminando

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Por ahora lo dejo, no tengo tiempo

Publicado por Shania (14 intervenciones) el 05/07/2004 13:15:48
Hola Edgar!
Voy a hacerlo de otra forma ya que me corre prisa el proyecto, ya lo intentaré en otro momento.
De todos modos, muchas gracias por tu ayuda.
Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar