| ID | Asunto | Fecha | Nick | |
| 41314 | Nuevo registro en un DatagridView | 14/05/08 04:23 | evegalle | |  |
Al ingresar un nuevo registro en un Datagrid o en un Datagridview este se mantiene durante la ejecución de la aplicación, mas no se guarda en la base de datos. Utilizo 2 capas (Presentación y Datos)
Código en la clase Form: Imports System.Data Imports System.Data.SqlClient Imports Datos.clsData Public Class frmBeneficiarios Private iPos As Integer Private iEdit As Boolean 'Establecer el nombre de la tabla en el formulario de mantenimiento Dim sTabla As String = "a_Beneficiarios" Dim sCampoBusca As String = "ben_id" Public ds As DataSet 'Instanciar la clase de acceso a datos Private cAcceso As New Datos.clsData
Private Sub frmClientes_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load cAcceso = New Datos.clsData ds = cAcceso.crearDSBenefeciarios Me.iPos = 0 ' cargar columnas del registro Me.CargarDatos() End Sub
Private Sub CargarDatos() Me.grdBenef.DataSource = Me.ds Me.grdBenef.DataMember = "a_Beneficiarios" End Sub
CAPA DE DATOS - Clase clsData
Imports System.Data Imports System.Data.SqlClient Public Class clsData Protected Const scn As String = "persist security info=false;integrated security=sspi; database=ASocial;server=(local);connect timeout=30 " Private daBeneficiarios As SqlDataAdapter
Dim cn As New SqlConnection(scn) Public dsdatos As New DataSet Public Event datasetcreado(ByVal vcreado As Boolean)
Public Function crearDSBenefeciarios() As DataSet daBeneficiarios = New SqlDataAdapter("sp_Beneficiarios", cn) daBeneficiarios.SelectCommand.CommandType = CommandType.StoredProcedure
Dim cmdInsercionB As New SqlCommand("INSERT INTO [ASocial].[dbo].[a_Beneficiarios] " & _ "([prgSoc_id], [ben_apPat], [ben_apMat], [ben_nom], [ben_sex], [ben_fecNac], " & _ "[ben_tipdoc], [ben_numdoc], [ben_dir], [ben_dirRef], [ben_ubigeo], [ben_orgSoc], " & _ "[user_id], [user_fechahora], [user_editado], [user_obs]) " & _ "VALUES(@prgSoc_id, @ben_apPat, @ben_apMat, @ben_nom, @ben_sex, @ben_fecNac, @ben_tipdoc, " & _ "@ben_numdoc, @ben_dir, @ben_dirRef, @ben_ubigeo, @ben_orgSoc, @user_id, " & _ "@user_fechahora, @user_editado, @user_obs)", cn) daBeneficiarios.InsertCommand = cmdInsercionB With daBeneficiarios.InsertCommand.Parameters .Add(New SqlParameter("@prgSoc_id", SqlDbType.Int)) .Add(New SqlParameter("@ben_apPat", SqlDbType.NVarChar)) .Add(New SqlParameter("@ben_apMat", SqlDbType.NVarChar)) .Add(New SqlParameter("@ben_nom", SqlDbType.NVarChar)) .Add(New SqlParameter("@ben_sex", SqlDbType.Bit)) .Add(New SqlParameter("@ben_fecNac", SqlDbType.DateTime)) .Add(New SqlParameter("@ben_tipdoc", SqlDbType.Char)) .Add(New SqlParameter("@ben_numdoc", SqlDbType.Char)) .Add(New SqlParameter("@ben_dir", SqlDbType.NVarChar)) .Add(New SqlParameter("@ben_dirRef", SqlDbType.NVarChar)) .Add(New SqlParameter("@ben_ubigeo", SqlDbType.Char)) .Add(New SqlParameter("@ben_orgSoc", SqlDbType.NVarChar)) .Add(New SqlParameter("@user_id", SqlDbType.Char)) .Add(New SqlParameter("@user_fechahora", SqlDbType.DateTime)) .Add(New SqlParameter("@user_editado", SqlDbType.Int)) .Add(New SqlParameter("@user_obs", SqlDbType.NVarChar)) End With
'E |
|
| ID | Asunto | Fecha | Nick | |
| 41322 | Re: Nuevo registro en un DatagridView (Resp: 41314) | 14/05/08 11:37 | ogerman | | |
¿ Asignastes las propiedades InsertCommand, UpdateCommand y DeleteCommand ademas del SelectCommand del SqlDataAdapter ?
Pregunto por las dudas porque en tu código no alcanza a salir.
Saludos Germán
Si esta respuesta resuelve tu duda, por favor pulsa en la de este mensaje. Gracias. |
|
| ID | Asunto | Fecha | Nick | |
| 41323 | Re: Nuevo registro en un DatagridView (Resp: 41314) | 14/05/08 11:41 | ogerman | | |
Perdón, si sale el InsertCommand, lo que no salen son los otros, y del InsertCommand no sale que la propiedad CommandType sea StoredProcedure
Saludos Germán
Si esta respuesta resuelve tu duda, por favor pulsa en la de este mensaje. Gracias. |
|
| ID | Asunto | Fecha | Nick | |
| 41354 | Re: Nuevo registro en un DatagridView (Resp: 41323) | 15/05/08 01:17 | evegalle | | |
Bueno, gracias Germán por la prontitud. Por razones de espacio no he puesto todo. En otro formulario, donde no empleo datagrid sino otros controles como textos, checks, etc, todo funciona muy bien, te agrego la función que implementé para ese caso en concreto:
Public Function InsertaUsuario(ByVal a1 As String, ByVal a2 As String, ByVal a3 As String, ByVal a4 As String, ByVal a5 As String, ByVal a6 As String, ByVal a7 As String) As Integer With daUsuario.InsertCommand .Parameters("@ApPat").Value = a1 .Parameters("@ApMat").Value = a2 .Parameters("@Nom").Value = a3 .Parameters("@Carg").Value = a4 .Parameters("@Pass").Value = a5 .Parameters("@Create").Value = a6 .Parameters("@LastAcc").Value = a7 End With cn.Open() Return daUsuario.InsertCommand.ExecuteNonQuery() cn.Close() End Function
Ahora, mi problema concreto es que al ingresar un nuevo registro en un datagrid o en un datagridview, no se "actualiza" en la tabla de la base de datos, puede uno digitar varios registros, pero al cerrar el formulario éstos se volatilizan ya que al reabrirlo ya no están. Alien .Net
Si esta respuesta resuelve tu duda, por favor pulsa en la de este mensaje. Gracias. |
|
| ID | Asunto | Fecha | Nick | |
| 41355 | Re: Nuevo registro en un DatagridView (Resp: 41354) | 15/05/08 01:19 | evegalle | | |
PD. Extraño VB 6  Alien .Net
Si esta respuesta resuelve tu duda, por favor pulsa en la de este mensaje. Gracias. |
|
| ID | Asunto | Fecha | Nick | |
| 41356 | Re: Nuevo registro en un DatagridView (Resp: 41354) | 15/05/08 01:54 | ogerman | | |
A ver: Te digo lo que yo se a ver si te ayuda. Para llenar la grilla utilizas la propiedad datasource proveniente de un dataset que llenastes con el metodo fill de un dataadapter. Este dataadapter tiene cuatro comandos: select que es el que utiliza para obtener los datos y los comandos para insert, update y delete. Tienes que inicializar esos comandos correctamente para que la grilla te haga todo de manera "automática". Para confirmar los datos en la base tienes que invocar al metodo update del objeto dataset que utilizas en la propiedad datasource de la grilla.
Saludos Germán
Si esta respuesta resuelve tu duda, por favor pulsa en la de este mensaje. Gracias. |
|
| ID | Asunto | Fecha | Nick | |
| 41358 | Re: Nuevo registro en un DatagridView (Resp: 41356) | 15/05/08 02:48 | evegalle | | |
Ok. Gracias. Te cuento que prepare otro form maestro detalle e implementé un origen de datos en el Explorador de Servidores, conexion, verifique la relación en el dataset, ok. Luego dragdrop a la parte "Maestro" (cuadros de texto, básicamente) y luego a la parte "Detalle" (Datagridview), Luego, para que funcione la "relación" modifico la propiedad DataSource de la grilla para generar un "BindingSource". Ejecuto y trabaja bien. Agrego un nuevo registro a la parte detalle (en el datagridview), incluso pulso el botón "Guardar", pero ocurre igual, pierdo datos al reiniciar el formulario. El código? bueno, el diseñador lo escribió así: ------------------------------------------------------------------------------------------------ Public Class frmBenef Private Sub A_ProgSocialBindingNavigatorSaveItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles A_ProgSocialBindingNavigatorSaveItem.Click Me.Validate() Me.A_ProgSocialBindingSource.EndEdit() 'NATURALMENTE, GERMAN, TE REFIERES A ESTA LINEA, pero nada, no actualiza. Qué me falta? Me.A_ProgSocialTableAdapter.Update(Me.ASocialDS.a_ProgSocial) End Sub Private Sub frmBenef_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'TODO: esta línea de código carga datos en la tabla 'ASocialDS.a_Beneficiarios' Me.A_BeneficiariosTableAdapter.Fill(Me.ASocialDS.a_Beneficiarios) 'TODO: esta línea de código carga datos en la tabla 'ASocialDS.a_ProgSocial' Me.A_ProgSocialTableAdapter.Fill(Me.ASocialDS.a_ProgSocial) End Sub End Class --------------------------------------------------------------------------------------------- NATURALMENTE, GERMAN, TE REFIERES A ESTA LINEA: Me.A_ProgSocialTableAdapter.Update(Me.ASocialDS.a_ProgSocial) pero nada, no actualiza. Qué me falta? Bueno, tengo un par de ideas, veré que hago y te comento el resultado. Ok? Gracias por tu ayuda. Te cuento, he buscado en los libros que tengo y nada, creo que voy a realizar un "estudio" profundo del datagridview y/o datagrid, opino que es un control un tanto "misterioso", pero que en realidad es solo de agarrarle el truco, entiendo claro que este mi caso o problema, no es responsabilidad de la grilla, pero...  Ojalá y sigas en línea, jeje. Saludos desde Arequipa, Perú. Alien .Net
Si esta respuesta resuelve tu duda, por favor pulsa en la de este mensaje. Gracias. |
|
| ID | Asunto | Fecha | Nick | |
| 41359 | Re: Nuevo registro en un DatagridView (Resp: 41358) | 15/05/08 02:51 | evegalle | | |
OOOOPPPPPSSS Lo siento, no advertí este mensaje, 20/Oct/2006 Repetimos: ya que de vez en cuando es bueno que sepas que cosas te facilitarán las respuestas: -No repitas mensajes, -Intenta escribir un asunto adecuado a tu duda, -No personalices (no indiques el nombre de quien quieres que responda), -Explica bien tu duda, ten en cuenta que el que lee no puede leer tu mente y necesita saber todo lo que tu sabes para poder ayudarte. Gracias.
mil disculpas...
Alien .Net
Si esta respuesta resuelve tu duda, por favor pulsa en la de este mensaje. Gracias. |