Ver Mensaje Individual
  #6 (permalink)  
Antiguo 22/12/2009, 16:47
Avatar de Porlachucha
Porlachucha
 
Fecha de Ingreso: noviembre-2008
Ubicación: Santiago
Mensajes: 172
Antigüedad: 15 años, 6 meses
Puntos: 5
Respuesta: agregar datos en datagridview sin alterar los que ya hay.

la propiedad readonly, debes setearla antes del evento KeyUp.
me imagino que en tu evento load llenas el gridAlergias. al finalizar esta carga (con los datos que ya existen en la BD) estableces la propiedad readonly de las columnas de tu datagridview.
mira este codigo de ejemplo (usa store procedures)

Código:
primero obtengo desde la base de datos un datatable con informacion... 
                            dttAgrupamientos = qbData.dttObtieneAgrupamientos(sCodigoEmpresa);
                            if (dttAgrupamientos.Rows.Count > 0)
                            {
                                dgvAgrupamientos.DataSource = dttAgrupamientos;
                            }
                            else
                            {
                                dgvAgrupamientos.DataSource = null;
                                dgvAgrupamientos.DataBindings.Clear();
                                return true;
                            }

// aca utilizo un databind para hacer un puente entre los datos de mi consulta, y las columnas del datagridview
                            BindingSource bAsociacion = new BindingSource();
                            bAsociacion.DataSource = dttAgrupamientos;

// aca hago el enlace entre el datagridview y el datatable
                            dgvAgrupamientos.AutoGenerateColumns = false;
                            dgvAgrupamientos.DataSource = bAsociacion;

// aca defino en tiempo de ejecucion las columnas que tendra mi datagridview (esto tb lo puedes hacer en tiempo de diseño)
                            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"));

// aca establezco las propiedades del datagridview (visible, readonly, ancho, alto, etc)
                            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;  // permite que se pueda seleccionar el elemento checkbox
                            dgvAgrupamientos.Columns[3].ReadOnly = true;  // deja la columna solo con permisos de lectura
                            dgvAgrupamientos.Columns[5].ReadOnly = true;
                            dgvAgrupamientos.Columns[7].ReadOnly = true;
                            dgvAgrupamientos.Columns[9].ReadOnly = true;
                            dgvAgrupamientos.AllowUserToDeleteRows = false;  // no permite que el usuario elimine filas
                            dgvAgrupamientos.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;

todo este codigo, esta puesto en un evento que se encarga de cargar los datos que ya existen en mi BD.

despues de esto, vienen los eventos KeyUp, o cualquiera que intente en tiempo de ejecucion alterar el contenido de tu datagridview. En tu codigo, debes tener en consideracion que si quieres alterar el contenido de una celda, debes darle los permisos previamente por ejemplo programando la propiedad readonly = false en el evento que te dispara la creacion de un nuevo registro.
espero que te aclare un poco mas el tema
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 ...