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

trabajando con datagrid..ayuda

Estas en el tema de trabajando con datagrid..ayuda en el foro de .NET en Foros del Web. bueno ahora me a tocado trabajar con los datagrid y tras una pekeña introduccion en la k visualizo los campos de la base de datos ...
  #1 (permalink)  
Antiguo 21/12/2009, 15:47
 
Fecha de Ingreso: marzo-2008
Mensajes: 81
Antigüedad: 16 años, 2 meses
Puntos: 0
trabajando con datagrid..ayuda

bueno ahora me a tocado trabajar con los datagrid y tras una pekeña introduccion en la k visualizo los campos de la base de datos me surgen varios problemillas.
tengo un form en el k hay un datagrid que me visualiza los datos de una consulta que hize en access y luego tres botones (por ahora)añadir,editar y borrar.
el boton de añadir lo e desarrollado bien pero al volver a cargar el form con el datagrid los datos añadidos no se me visualizan..cual puede ser el error??

otra cosa seria el desarrollo del boton editar,la idea es que seleccione con el puntero la posicion en el datagrid que quiero editar y esta se cargue en un form identico al de añadir y desde hay modifique los datos y actualice la bd.

y estos son los problemas k tengo por ahora,espero vuestra ayuda,
saludos

estoy trabajando con vb 2005 y acces 2003
  #2 (permalink)  
Antiguo 21/12/2009, 18:57
Avatar de Porlachucha  
Fecha de Ingreso: noviembre-2008
Ubicación: Santiago
Mensajes: 172
Antigüedad: 15 años, 6 meses
Puntos: 5
Respuesta: trabajando con datagrid..ayuda

podrias mostrar el codigo para añadoir registros? es dificil saber en que te estas equivocando sin el codigo.
respecto de lo segundo. creo que añadir un nuevo form para editar los datos, es innecesario, ya que puedes en el mismo grid, poner controles que te permitan la edicion.
fijate en este codigo, crea un datagridview, con checkbox, textbox, y combobox. despues haciendo referencia al elemento seleccionado (en el datagrisview, tienes toda la informacion para actualizar la base de datos.

Código:
                 #region Despliega  centros
                            dttAgrupamientos = qbData.dttObtieneAgrupamientos(); // obtiene los datos desde la BD
                            if (dttAgrupamientos.Rows.Count > 0)
                            {
                                dgvAgrupamientos.DataSource = dttAgrupamientos;
                            }
                            else
                            {
                                dgvAgrupamientos.DataSource = null;
                                dgvAgrupamientos.DataBindings.Clear();
                                return true;
                            }

                            BindingSource bsAsociacion = new BindingSource();
                            bsAsociacion.DataSource = dttAgrupamientos;

                            dgvAgrupamientos.AutoGenerateColumns = false;
                            dgvAgrupamientos.DataSource = bsAsociacion;
                            dgvAgrupamientos.Columns.Add(SGS_Utiles.dgvtbAgregaCheckBox("Sel.", "Seleccionada"));
                            dgvAgrupamientos.Columns.Add(SGS_Utiles.dgvtbAgregaTexBox("codigo_empresa", "dgv_CodigoEmpresa", ""));
                            dgvAgrupamientos.Columns.Add(SGS_Utiles.dgvtbAgregaTexBox("codigo_centro", "dgv_CodigoCentro", ""));
                            dgvAgrupamientos.Columns.Add(SGS_Utiles.dgvtbAgregaTexBox("nombre_centro", "dgv_NombreCentro", "Centro"));
                            dgvAgrupamientos.Columns.Add(SGS_Utiles.dgvtbAgregaTexBox("codigo_zona_intesal", "dgv_CodigoZonaIntesal", ""));
                            dgvAgrupamientos.Columns.Add(SGS_Utiles.CreateComboBoxWithEnums(dttZonasIntesal, "CodIni", "CodEqu", "Zona Intesal", "codigo_zona_Intesal"));
                            dgvAgrupamientos.Columns.Add(SGS_Utiles.dgvtbAgregaTexBox("codigo_zona_sgs", "dgv_CodigoZonaSGS", ""));
                            dgvAgrupamientos.Columns.Add(SGS_Utiles.CreateComboBoxWithEnums(dttZonasSGS, "LocCod", "LocDes", "Zona SGS", "codigo_zona_sgs"));
                            dgvAgrupamientos.Columns.Add(SGS_Utiles.dgvtbAgregaTexBox("codigo_region", "dgv_CodigoRegion", ""));
                            dgvAgrupamientos.Columns.Add(SGS_Utiles.CreateComboBoxWithEnums(dttRegiones, "DptCod", "DptDes", "Region", "codigo_region"));
                            dgvAgrupamientos.Columns[0].Visible = true;
                            dgvAgrupamientos.Columns[1].Visible = false;
                            dgvAgrupamientos.Columns[2].Visible = false;
                            dgvAgrupamientos.Columns[3].Visible = true;
                            dgvAgrupamientos.Columns[4].Visible = false;
                            dgvAgrupamientos.Columns[5].Visible = true;
                            dgvAgrupamientos.Columns[6].Visible = false;
                            dgvAgrupamientos.Columns[7].Visible = true;
                            dgvAgrupamientos.Columns[8].Visible = false;
                            dgvAgrupamientos.Columns[9].Visible = true;

                            dgvAgrupamientos.Columns[0].Width = 50;
                            dgvAgrupamientos.Columns[3].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
                            dgvAgrupamientos.Columns[5].Width = 150;
                            dgvAgrupamientos.Columns[7].Width = 150;
                            dgvAgrupamientos.Columns[9].Width = 150;

                            dgvAgrupamientos.AllowUserToAddRows = false;
                            dgvAgrupamientos.ReadOnly = false;
                            dgvAgrupamientos.Columns[0].ReadOnly = false;
                            dgvAgrupamientos.Columns[3].ReadOnly = true;
                            dgvAgrupamientos.Columns[5].ReadOnly = true;
                            dgvAgrupamientos.Columns[7].ReadOnly = true;
                            dgvAgrupamientos.Columns[9].ReadOnly = true;
                            dgvAgrupamientos.AllowUserToDeleteRows = false;
                            dgvAgrupamientos.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;
                            return true;
                            #endregion
aca estan las funciones para agregar elementos a tu datagridview

Código:
        public static DataGridViewTextBoxColumn dgvtbAgregaTexBox(string sDataPropertyName, string sName, string sHeader)
        {
            DataGridViewTextBoxColumn Tbx = new DataGridViewTextBoxColumn();
            Tbx.DataPropertyName = sDataPropertyName;
            Tbx.Name = sName;
            Tbx.HeaderText = sHeader;
            return Tbx;
        }
        public static DataGridViewComboBoxColumn CreateComboBoxWithEnums(DataTable dttDatosCombo, string sValueMember, string sDisplayMember, string sHeaderText, string sDataPropertyName)
        {
            DataGridViewComboBoxColumn Combo = new DataGridViewComboBoxColumn();
            Combo.DataSource = dttDatosCombo;
            Combo.ValueMember = sValueMember;
            Combo.DisplayMember = sDisplayMember;
            Combo.HeaderText = sHeaderText;
            Combo.DataPropertyName = sDataPropertyName;
            return Combo;
        }
        public static DataGridViewCheckBoxColumn dgvtbAgregaCheckBox(string sHeader, string sName)
        {
            DataGridViewCheckBoxColumn Chx = new DataGridViewCheckBoxColumn();
            Chx.HeaderText = sHeader;
            Chx.Name = sName;
            return Chx;
        }
fijate que para cada columna de tu datagridview, puedes especificar si estara o no visible, si podra ser o no editable, etc.

despues todo lo que tienes que hacer, es recorrer tu datagridview, y revisar si el checkbox esta ""encendido"" y realizar las acciones de eliminacion, o de edicion, o simplemente crear un nuevo elemento con el metodo add sobre el datatable asociado al datagridview (ojo en el datatable no en datagridview).

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 ...
  #3 (permalink)  
Antiguo 22/12/2009, 03:11
 
Fecha de Ingreso: marzo-2008
Mensajes: 81
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: trabajando con datagrid..ayuda

este es el codigo para añadir el registro en la bd ,k lo hace correctamente
Código vb:
Ver original
  1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  2.         If TextBox1.Text = "" Or TextBox2.Text = "" Then
  3.             MsgBox("debes de meter datos en los textbox")
  4.             TextBox1.Focus()
  5.  
  6.         Else
  7.             Dim sCnn As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & " Data Source=C:\negocio\negocio.mdb"
  8.             Dim conex As New OleDb.OleDbConnection
  9.             Dim comm As New OleDb.OleDbCommand
  10.             conex.ConnectionString = sCnn
  11.             comm.Connection = conex
  12.             comm.CommandText = "INSERT INTO usuarios(usuario,contraseña,direccion,poblacion,ciudad,telefono,movil,nif) VALUES('" & TextBox1.Text & "','" & TextBox2.Text & "','" & TextBox3.Text & "','" & TextBox4.Text & "','" & TextBox5.Text & "','" & TextBox6.Text & "','" & TextBox7.Text & "','" & TextBox8.Text & "')"
  13.             conex.Open()
  14.             comm.ExecuteNonQuery()
  15.             conex.Close()
  16.             MsgBox("Ingreso correcto")
  17.  
  18.         End If
  19.     End Sub
  #4 (permalink)  
Antiguo 22/12/2009, 06:08
Avatar de Porlachucha  
Fecha de Ingreso: noviembre-2008
Ubicación: Santiago
Mensajes: 172
Antigüedad: 15 años, 6 meses
Puntos: 5
Respuesta: trabajando con datagrid..ayuda

compruebas que el dato esta correctamente ingresado al mirar la BD?
en cualquier caso, revisa la consulta con la cual estas poblando el datagridview. puede ser que estes aplicando algun filtro que no te permita ver los datos nuevos. el ejemplo que te pase anteriormente puedes ver como tratar el datagridview para que muestre datos en base a lo que tiene tu consulta. Asegurate de hacer coincidir los campos de tu consulta con los del datagridview mediante la propiedad sDataPropertyName de cada control.
salu2
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 ...
  #5 (permalink)  
Antiguo 22/12/2009, 11:35
 
Fecha de Ingreso: marzo-2008
Mensajes: 81
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: trabajando con datagrid..ayuda

tras investigar por google di con un codigo que e conseguido adaptar a mi form,pero me da un error:
Código vb:
Ver original
  1. Imports System.Data.OleDb
  2.  
  3. Public Class Form6
  4.     Dim dt As New DataTable
  5.     Dim fila As Integer = 0
  6.     Dim da As New OleDb.OleDbDataAdapter
  7.     'BindingSource  
  8.    Private WithEvents bs As New BindingSource
  9.     ' Cadena de conexión  
  10.    Dim sCnn As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & " Data Source=C:\negocio\negocio.mdb"
  11.     ' flag  
  12.    Private bEdit As Boolean
  13.  
  14.     ' actualizar los cambios al salir    
  15.    Private Sub Form6_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
  16.         If bEdit Then
  17.             'preguntar si se desea guardar  
  18.            If (MsgBox("Guardar cambios ?", MsgBoxStyle.YesNo, "guardar")) = MsgBoxResult.Yes Then
  19.                 Actualizar(False)
  20.             End If
  21.         End If
  22.     End Sub
  23.     Private Sub Form6_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  24.         ' propiedades del datagrid  
  25.        With DataGridView1
  26.             ' alternar color de filas  
  27.            .AlternatingRowsDefaultCellStyle.BackColor = Color.FloralWhite
  28.             .DefaultCellStyle.BackColor = Color.Beige
  29.             ' Establecer el origen de datos para el DataGridview  
  30.            .DataSource = bs
  31.         End With
  32.         ' cagar los datos  
  33.        cargar_registros("Select * From usuarios", DataGridView1)
  34.     End Sub
  35.  
  36.     Private Sub cargar_registros(ByVal sql As String, ByVal dv As DataGridView)
  37.  
  38.         Try
  39.             ' Inicializar el SqlDataAdapter indicandole el comando y el connection string  
  40.            Dim sq As String = "SELECT * FROM usuarios"
  41.             ' Crear un nuevo objeto del tipo DataAdapter
  42.            Dim da As New OleDb.OleDbDataAdapter(sq, sCnn)
  43.             da.Fill(dt)
  44.             ' Enlazar el BindingSource con el datatable anterior  
  45.            bs.DataSource = dt
  46.  
  47.             With dv
  48.                 .Refresh()
  49.                 ' coloca el registro arriba de todo  
  50.                .FirstDisplayedScrollingRowIndex = bs.Position
  51.             End With
  52.  
  53.             bEdit = False
  54.         Catch exSql As OleDbException
  55.             MsgBox(exSql.Message.ToString)
  56.         Catch ex As Exception
  57.             MsgBox(ex.Message.ToString)
  58.         End Try
  59.     End Sub
  60.     ' botón para guardar los cambios y llenar la grilla  
  61.    Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click
  62.         Actualizar()
  63.     End Sub
  64.     ' Eliminar el elemento actual del BindingSource y actualizar  
  65.    Private Sub buton6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
  66.         If Not bs.Current Is Nothing Then
  67.             ' eliminar  
  68.            bs.RemoveCurrent()
  69.             'Guardar los cambios y recargar  
  70.            Actualizar()
  71.         Else
  72.             MsgBox("No hay un registro actual para eliminar", MsgBoxStyle.Exclamation, "Eliminar")
  73.         End If
  74.     End Sub
  75.     Private Sub Actualizar(Optional ByVal bCargar As Boolean = True)
  76.         ' Actualizar y guardar cambios  
  77.        If Not bs.DataSource Is Nothing Then
  78.             da.Update(CType(bs.DataSource, DataTable))   ' <<------aki me da el error
  79.            If bCargar Then
  80.                 cargar_registros("Select * From usuarios", DataGridView1)
  81.             End If
  82.         End If
  83.     End Sub
  84.     Private Sub button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, Button4.Click, Button3.Click, Button2.Click
  85.         If sender Is Button2 Then
  86.             bs.MovePrevious()
  87.         ElseIf sender Is Button1 Then
  88.             bs.MoveFirst()
  89.         ElseIf sender Is Button3 Then
  90.             bs.MoveNext()
  91.         ElseIf sender Is Button4 Then
  92.             bs.MoveLast()
  93.         End If
  94.     End Sub
  95.     Private Sub DataGridView1_CellEndEdit( _
  96.         ByVal sender As Object, _
  97.         ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) _
  98.             Handles DataGridView1.CellEndEdit
  99.         bEdit = True
  100.     End Sub
  101.     ' nuevo registro  
  102.    Private Sub button5_Click( _
  103.         ByVal sender As System.Object, _
  104.         ByVal e As System.EventArgs) Handles Button5.Click
  105.         bs.AddNew()
  106.     End Sub
  107. End Class
Error:Update requiere que DeleteCommand sea válido cuando se pasa la colección DataRow con filas eliminadas.
Me da error al intentar borrar,editar o guardar los cambios
los botones ir al primero,ir al ultimo,siguiente anterior funcionan perfectamente
gracias por vuestro tiempo
  #6 (permalink)  
Antiguo 23/12/2009, 10:59
 
Fecha de Ingreso: marzo-2008
Mensajes: 81
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: trabajando con datagrid..ayuda

alguna ayuda...
saludos
  #7 (permalink)  
Antiguo 26/12/2009, 08:34
 
Fecha de Ingreso: marzo-2008
Mensajes: 81
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: trabajando con datagrid..ayuda

seria d gran importancia vuestra ayuda
gracias anticipadas
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 11:06.