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

agregar datos en datagridview sin alterar los que ya hay.

Estas en el tema de agregar datos en datagridview sin alterar los que ya hay. en el foro de .NET en Foros del Web. Buenas Tardes. Tengo un datagridview que se llena desde una base de datos, he creado un metodo para que al escribir en la ultima linea ...
  #1 (permalink)  
Antiguo 21/12/2009, 11:28
Avatar de pyroCL  
Fecha de Ingreso: marzo-2009
Ubicación: C#
Mensajes: 261
Antigüedad: 15 años, 1 mes
Puntos: 2
agregar datos en datagridview sin alterar los que ya hay.

Buenas Tardes.

Tengo un datagridview que se llena desde una base de datos, he creado un metodo para que al escribir en la ultima linea del datagridview y presionar ENTER, se agregue esta en la base de datos.

Lo que no puedo hacer es, que no me deje escribir en las lineas de al medio, modificando lo que hay, es decir solo quiero agregar datos, no modificar ni que se borren los que están.

Intente solo activar el Enable Adding, pero no funciona, luego Enable Adding + Enable Editing, pero nada aun se puede escribir encima de los datos que está mostrando la datagridview.

Espero alguien me pueda ayudar, saludos.

Gracias!
__________________
La verdadera sabiduría está en reconocer la propia ignorancia.
  #2 (permalink)  
Antiguo 21/12/2009, 19:00
Avatar de 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.

segun te entiendo, quieres editar los datos existentes y modificar la BD despues de terminar la edicion?
revisa la propiedad readonly de cada celda. puede ser que sea true, y por eso no te deja escribir sobre el datagridview
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 ...
  #3 (permalink)  
Antiguo 22/12/2009, 05:03
Avatar de pyroCL  
Fecha de Ingreso: marzo-2009
Ubicación: C#
Mensajes: 261
Antigüedad: 15 años, 1 mes
Puntos: 2
Respuesta: agregar datos en datagridview sin alterar los que ya hay.

Perdón me expliqué mal...
me explico nuevamente.
Lo que quiero hacer es que me deje escribir sólo en la ultima linea de la datagridview no en las de al medio (las que ya tienen datos).

No tengo problemas en guardar los nuevos datos que ingreso.

Mi único porblema es ese que describo arriba.


Ejemplo...

Si la grilla muestra (desde la BD)

NUMEROS

1
2
3
4
5

y yo le quiero agregar un "6"

quiero que este "6" me lo deje agregar sólo en la ultima linea y que si escribo encima de alguno de los otros numero que ya estan, no se pueda hacer.

Lo que hace hasta ahora es:

NUMEROS
1
2
3
6 //<-- puedo borrar el "4" y escribir el "6", al guardarlo guarda sin problemas el "6" y al recargar la grilla lo muestra al final... Pero no quiero que borre el 4, quiero que obligue a escribir sólo al final (en la última fila) //
5

Se entiende un poco más?

Saludos.
Gracias!
__________________
La verdadera sabiduría está en reconocer la propia ignorancia.
  #4 (permalink)  
Antiguo 22/12/2009, 05:58
Avatar de 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.

ok ya te entendi. para esto, puedes por ejemplo hacer que las columnas queden con la propiedad readonly en true al momento de cargar el DatagridView con datos para evitar que el usuario pueda modificar su contenido.

dgvMiDatGridView.Columns[X].ReadOnly = true;

y al momento de hacer el add sobre el datatable, le cambias la popiedad a la celda (para lograr que solo la celda nueva pueda ser editada). Tambien puedes cambiar la propiedad a false de toda la fila.

dgvMiDatGridView.Rows[Y].Cells[X].ReadOnly = false;

o bien

dgvMiDatGridView.CurrentRow.ReadOnly = false;

lo mismo al momento de editar las filas ya creadas. solo cambias la propiedad

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, 10:49
Avatar de pyroCL  
Fecha de Ingreso: marzo-2009
Ubicación: C#
Mensajes: 261
Antigüedad: 15 años, 1 mes
Puntos: 2
Respuesta: agregar datos en datagridview sin alterar los que ya hay.

No me funciona!!!!!

Pongo el código para que lo veas, lo que hace esto es que al escribir en la grilla (la idea es que solo en la ultima fila) y presionar ENTER, se guarda en la base de datos y se vuelve a llenar la data

Código C#:
Ver original
  1. private void gridAlergias_KeyUp(object sender, KeyEventArgs e)
  2.         {
  3.  
  4.  
  5.             if (e.KeyCode == Keys.Enter)
  6.             {
  7.                 if (gridAlergias.Rows.Count > 0)
  8.                 {
  9.                     int i = gridAlergias.Rows.Count;
  10.                     i = i - 2;
  11.                     buscaAlergia(gridAlergias.Rows[i].Cells[0].Value.ToString().ToLower());
  12.                     if ((gridAlergias.Rows[i].Cells[0].Value.ToString() != "") && (buscaAlergia(gridAlergias.Rows[i].Cells[0].Value.ToString().ToLower())) == false)
  13.                     {
  14.                         conDB.creaAlergia(rut, gridAlergias.Rows[i].Cells[0].Value.ToString().ToUpper());
  15.                         informacion("Alergia creada");
  16.                         llenarAlergias();
  17.                     }
  18.                 }
  19.             }
  20.            
  21.            
  22.         }


Saludos.
Graicas!
__________________
La verdadera sabiduría está en reconocer la propia ignorancia.
  #6 (permalink)  
Antiguo 22/12/2009, 16:47
Avatar de 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 ...
  #7 (permalink)  
Antiguo 23/12/2009, 06:26
Avatar de pyroCL  
Fecha de Ingreso: marzo-2009
Ubicación: C#
Mensajes: 261
Antigüedad: 15 años, 1 mes
Puntos: 2
Respuesta: agregar datos en datagridview sin alterar los que ya hay.

Excelente...

Gracias!
__________________
La verdadera sabiduría está en reconocer la propia ignorancia.
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:05.