es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo saltar la fila cuando no hay un desencadenador de edición en una celda?

Estoy creando una aplicación simple con datagridview. Los usuarios tienen la capacidad de actualizar varias filas.
No tengo problemas al guardar múltiples filas en una ejecución.
Pero mi problema es cómo saltar la fila cuando no hay un desencadenador de edición en una celda?

Porque estoy usando el bucle For para actualizar varias filas.

 int rows = 0;
 for (int i = 0; i < frm1.dgViewTask.Rows.Count; i++)
 {
     if (frm1.btnMLA.Enabled == false)
     {
         objNPTBEL.reportingDate = reportingDate.ToString();
         objNPTBEL.startDate = startDate.ToString();
         objNPTBEL.endDate = endDate.ToString();
     }
     else
     {
         objNPTBEL.reportingDate = reportingDate1.ToString();
         objNPTBEL.startDate = estStartDate.ToString();
         objNPTBEL.endDate = estEndDate.ToString();
     }

         objNPTBEL.id = Convert.ToInt32(frm1.dgViewTask.Rows[i].Cells[0].Value);
         objNPTBEL.taskname = frm1.dgViewTask.Rows[i].Cells[4].Value.ToString();
         objNPTBEL.remarks = frm1.dgViewTask.Rows[i].Cells[5].Value.ToString();

         rows = objNPTBLL.NonProcessingTime(9, objNPTBEL.id, objNPTBEL.workdayID, objNPTBEL.taskname, objNPTBEL.reportingDate, objNPTBEL.remarks, objNPTBEL.startDate, objNPTBEL.endDate, null, null, objNPTBEL.eststartDate, objNPTBEL.estendDate, null, objNPTBEL.estreportingDate, null, null, objNPTBEL.rationale);
 }

 si (filas >  0)
 {
     MessageBox.Show("Atualizado com sucesso.", "DigiTrack", MessageBoxButtons.OK, MessageBoxIcon.Information);
     frm1.RefreshdgViewTask();
     frm1.clearVariable();
     this.Hide();
 }

Estoy pensando si tengo 500+ filas, se repetirá 500+. ¿Hay alguna manera de saltar la celda no modificada?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para saltar la celda que no ha sido modificada, puede utilizar el evento DataGridView.CellValueChanged para detectar si se ha actualizado alguna celda en el control DataGridView. Una vez que se ha actualizado una celda, puede establecer una bandera para indicar que la fila necesita ser actualizada. Luego, en el For Loop, puede comprobar si se ha establecido la bandera para la fila actual y sólo actualizar la fila si la bandera es verdadera.

    Aquí hay un ejemplo:

    bool[] rowsToUpdate = new bool[frm1.dgViewTask.Rows.Count];
    
    // manejar el evento CellValueChanged
    private void dgViewTask_CellValueChanged(object sender, DataGridViewCellEventArgs e)
    {
        rowsToUpdate[e.RowIndex] = true;
    }
    
    // actualizar sólo las filas que han cambiado
    for (int i = 0; i < frm1.dgViewTask.Rows.Count; i++)
    {
        if (!rowsToUpdate[i])
        {
            // saltar esta fila ya que no ha cambiado
            continue;
        }
    
        // actualizar la fila aquí
        // ...
    }
    

    En este ejemplo, creamos un array de valores bool para rastrear si una fila necesita ser actualizada o no. Cuando se dispara el evento CellValueChanged, establecemos la bandera para la fila en true. Luego, en el For Loop, comprobamos si la bandera es true para la fila actual y sólo actualizamos la fila si ha cambiado. Esto reduce el número de filas que necesitan ser actualizadas y aumenta la eficiencia.

Comments are closed.