none
Edita una celda del datagridview RRS feed

  • Pregunta

  • Hola a todos buenos días. tengo un pequeño inconveniente.

    en un Datagridview en una columna especifica me muestra un dato dado el valor de otro celda, con en excel con buscar

    todo perfecto pero por ejemplo el dato es 15  o luego esos 15 no quiero que sean 15 sino mas bien 10 o 20 me deja cambiar pero al momento de salir de la celda se vuelve al dato anterior, con que evento puedo manejar eso para que persista el dato que estoy ingresando manualmente y no así el dato que me trajo de la BD.

    gracias por la colaboración

    Roberto

    jueves, 24 de enero de 2019 14:23

Respuestas

  • Yo lo hice para un formulario de carga de calificaciones. En el evento dgvPruebas_CellEndEdit(...) llamo al metodo guardar del objeto modificado, que se muestra el currentrow del dgv. 

    No se en tu caso que, al parecer, te conectas directamente a la base de datos, yo lo hice de otro modo: Primero cree la clase Prueba, esta clase contiene el metodo guardar, el dni del alumno y las notas. después cree un bindingsource, a este lo cargo con la lista de pruebas y datagridview lo elazo al bindignsourse.

    Te muestro a continuación lo básico y se te interesa te puedo guiar para que lo hagas con lo tuyo.

    La clase prueba:

     public sealed class Prueba
      {
        public Prueba()
        {
          Dni = 0;
        }     
            //Propiedades
        public Int32 Dni { get; set; }   
        public Int16 N1 { get; set; }
        public Int16 N1 { get; set; }
        public Int16 N3 { get; set; }
        public Int16 N4 { get; set; }   
    
        public bool Guardar()
        {
          //Codigo para guardar en la base de datso
        }
    
        public bool Eliminar()
        {
          //codigo para eliminar de la base de datos
        }
      }

    Creo el binding source, lo cargo y lo muestro en el datagridview

       BindingSource bsPrueba = new BindingSource();
       List<Prueba> lstPruebas;
    
        private void FrmPruebas_Load(object sender, EventArgs e)
        {
          lstPruebas = CargarPruebas() //busco pruebas de la db y creo objetos Prueba con esos datos
          bsPrueba = lstPruebas;
          grPruebas.AutoGenerateColumns = false;
          grPruebas.DataSource = bsPruebas;
        }

    El evento donde se guardan las modificaciones

     private void grPruebas_RowValidated(object sender, DataGridViewCellEventArgs e)
        {
          Prueba p = (Prueba)bsPruebas.Current;
          if (!p.Guardar())
              MessageBox.Show("No se guardó el cambio", "CAMBIOS", MessageBoxButtons.OK, MessageBoxIcon.Error);
          }
        }

     
    lunes, 28 de enero de 2019 19:20

Todas las respuestas

  • Gracias por levantar tu consulta en los foros de MSDN. Con respecto a la misma, para poder darte una mejor atención, te solicitamos de favor que nos brindes un poco más de información acerca del problema que se te presenta, así como compartirnos un fragmento del código para podernos dar una idea más clara de lo que requieres.

    Gracias por usar los foros de MSDN.

    Pedro Alfaro
     ____

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft. 

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.

    jueves, 24 de enero de 2019 19:12
    Moderador
  • bueno tengo este código en el este evento

    private void dtvVolumenVolquetas_CellEndEdit(object sender, DataGridViewCellEventArgs e)
            {
    
    
    
                SendKeys.Send("{UP}");
                SendKeys.Send("{TAB}");
    
                string headerText = dtvVolumenVolquetas.Columns[e.ColumnIndex].HeaderText;
                if (headerText.Equals("VOLQUETA"))
                {
                    try
                    {
                        // lo saque para poder tener el IdDevuelto aqui estaba IdDevuelto como string IdDevuelto = null
                        string CodigoPasado = (dtvVolumenVolquetas.Rows[e.RowIndex].Cells[0].Value.ToString());
                        var CodigoEquipo = CADequipos.ListadoEquipos();
                        var GetCodigoEquipo = (from IdEquipo in CodigoEquipo
                                               where IdEquipo.Prefijo == CodigoPasado
                                               select new { IdEquipo.Prefijo, IdEquipo.CapacidadTolva,IdEquipo.IdEquipo }).ToList();
                        foreach (var item in GetCodigoEquipo)
                        {
                            CapacidadDevuelta = (item.CapacidadTolva.ToString());
                            IdEquipo = (int.Parse(item.IdEquipo.ToString()));
                            //IdDevuelto = 50.ToString();
                        }
    
                        dtvVolumenVolquetas.Rows[e.RowIndex].Cells[1].Value = CapacidadDevuelta.ToString();
                        dtvVolumenVolquetas.Rows[e.RowIndex].Cells[10].Value = IdEquipo.ToString();
                        // Clear the row error in case the user presses ESC.   
                        dtvVolumenVolquetas.Rows[e.RowIndex].ErrorText = String.Empty;
                    }
                    catch (Exception)
                    {
    
                        dtvVolumenVolquetas.Rows[e.RowIndex].ErrorText = "Debe ingresar el código de la volqueta";
                        dtvVolumenVolquetas.Rows[e.RowIndex].Cells["Volqueta"].ToString();
                    }
                    
                }
            }
    

    cuando intento pasar a la otra celda me trae a la celda sigueinte la capacidad osea un numero, como muestro en la imagen

    pero quisiera que yo también pueda manualmente cambiar ese numero para que en la bd se guarde el número que esta en esa celda. el numero cambia pero al salir de la celda se vuelve el mismo número. y me gustaría que persista el que yo ingreso en caso quiera cambiar o que se quede como está, ahora ahora todo bien hace los cálculos y demás pero aveces voy a necesitar cambiar ese dato.

    como puedo hacer por favor.

    gracias

    Roberto

    sábado, 26 de enero de 2019 15:12
  • Yo lo hice para un formulario de carga de calificaciones. En el evento dgvPruebas_CellEndEdit(...) llamo al metodo guardar del objeto modificado, que se muestra el currentrow del dgv. 

    No se en tu caso que, al parecer, te conectas directamente a la base de datos, yo lo hice de otro modo: Primero cree la clase Prueba, esta clase contiene el metodo guardar, el dni del alumno y las notas. después cree un bindingsource, a este lo cargo con la lista de pruebas y datagridview lo elazo al bindignsourse.

    Te muestro a continuación lo básico y se te interesa te puedo guiar para que lo hagas con lo tuyo.

    La clase prueba:

     public sealed class Prueba
      {
        public Prueba()
        {
          Dni = 0;
        }     
            //Propiedades
        public Int32 Dni { get; set; }   
        public Int16 N1 { get; set; }
        public Int16 N1 { get; set; }
        public Int16 N3 { get; set; }
        public Int16 N4 { get; set; }   
    
        public bool Guardar()
        {
          //Codigo para guardar en la base de datso
        }
    
        public bool Eliminar()
        {
          //codigo para eliminar de la base de datos
        }
      }

    Creo el binding source, lo cargo y lo muestro en el datagridview

       BindingSource bsPrueba = new BindingSource();
       List<Prueba> lstPruebas;
    
        private void FrmPruebas_Load(object sender, EventArgs e)
        {
          lstPruebas = CargarPruebas() //busco pruebas de la db y creo objetos Prueba con esos datos
          bsPrueba = lstPruebas;
          grPruebas.AutoGenerateColumns = false;
          grPruebas.DataSource = bsPruebas;
        }

    El evento donde se guardan las modificaciones

     private void grPruebas_RowValidated(object sender, DataGridViewCellEventArgs e)
        {
          Prueba p = (Prueba)bsPruebas.Current;
          if (!p.Guardar())
              MessageBox.Show("No se guardó el cambio", "CAMBIOS", MessageBoxButtons.OK, MessageBoxIcon.Error);
          }
        }

     
    lunes, 28 de enero de 2019 19:20
  • Muchas gracias.

    me fue de mucha utilidad el ejemplo.

    Roberto

    miércoles, 3 de abril de 2019 15:10