none
agregar una nueva fila con un enter en un grid y posicionar en el focus en ella RRS feed

  • Pregunta

  • ¡Hola! Quisiera ver si alguien me pudiera ayudar , el lenguaje de programación que estoy usando es en c# con windows forms .. tengo un grid donde el usuario escribe datos manualmente y lo que quiero es que en la ultima columna al momento de dar enter se cree una nueva fila y se posicione el focus en ella.. ahorita hago que se cree la fila pero el focus se va a la misma fila donde ya se escribieron datos.. y lo hago de esta manera.

     private void dgPoliza_KeyPress(object sender, KeyPressEventArgs e)
            {
                if (e.KeyChar == (char)13)
                {
                    e.Handled = true; 
                    SendKeys.Send("{TAB}"); 
                    if (dgPoliza.CurrentCell.ColumnIndex == 9)
                    {                    
                        dgPoliza.Rows.AddNew();
                        dgPoliza.Refresh();                                   
                    }
                }
            }

    creo el nuevo renglon de esta forma ... como le podre hacer para que se cree y se vaya el focus al nuevo renglon? 

    jueves, 21 de marzo de 2019 0:11

Respuestas

  • Hola

    Ok intenta con esto

    en el constructor

    dgPoliza.KeyDown += dgPoliza_KeyDown;

    y en el evento

    private void dgPoliza_KeyDown(object sender, KeyEventArgs e)
            {
                e.SuppressKeyPress = true;
                int iColumn = dgPoliza.CurrentCell.ColumnIndex;
                int iRow = dgPoliza.CurrentCell.RowIndex;
                if (iColumn == 2)
                {
                    if (dgPoliza.RowCount > (iRow + 1))
                    {
                        dgPoliza.CurrentCell = dgPoliza[1, iRow + 1];
                    }
                    else
                    {
                        dgPoliza.CurrentCell.Selected = false;
                        dgPoliza.Rows.AddNew();
                        dgPoliza.Refresh();
                        dgPoliza.Rows[dataGridView1.Rows.Count - 1].Cells[0].Selected = true;
                    }
                }
                else
                    dgPoliza.CurrentCell = dgPoliza[iColumn + 1, iRow];
            }

    Y con eso creo que estara listo

    si te ha servido marcala como resuelto

    viernes, 22 de marzo de 2019 4:11

Todas las respuestas

  • Hola intenta con esto

    private void dgPoliza_KeyPress(object sender, KeyPressEventArgs e)
            {
                if (e.KeyChar == (char)13)
                {
                    e.Handled = true;                 
                    if (dgPoliza.CurrentCell.ColumnIndex == 9)
                    {                    
                        dgPoliza.Rows.AddNew();
                        dgPoliza.Refresh();                                   
                    }
                    SendKeys.Send("{TAB}");
     
                }
            }

    • Propuesto como respuesta Carlos_Ruiz_M jueves, 21 de marzo de 2019 16:05
    • Votado como útil Carlos_Ruiz_M jueves, 21 de marzo de 2019 19:37
    • Propuesto como respuesta Carlos_Ruiz_M viernes, 22 de marzo de 2019 15:54
    jueves, 21 de marzo de 2019 4:24
  • holaa, ya lo intente y no funciono .. gracias
    jueves, 21 de marzo de 2019 16:47
  • Hola

    Ok intenta con esto

    en el constructor

    dgPoliza.KeyDown += dgPoliza_KeyDown;


    y en el evento

    private void dgPoliza_KeyDown(object sender, KeyEventArgs e)
            {
                e.SuppressKeyPress = true;
                int iColumn = dgPoliza.CurrentCell.ColumnIndex;
                int iRow = dgPoliza.CurrentCell.RowIndex;
                if (iColumn == 2)
                {
                    if (dgPoliza.RowCount > (iRow + 1))
                    {
                        dgPoliza.CurrentCell = dgPoliza[1, iRow + 1];
                    }
                    else
                    {
                        dgPoliza.CurrentCell.Selected = false;
                        dgPoliza.Rows.AddNew();
                        dgPoliza.Refresh();
                        dgPoliza.Rows[dataGridView1.Rows.Count - 1].Cells[0].Selected = true;
                    }
                }
                else
                    dgPoliza.CurrentCell = dgPoliza[iColumn + 1, iRow];
            }

    Y con eso creo que estara listo

    si te ha servido marcala como resuelto

    • Editado Marti Llam viernes, 22 de marzo de 2019 4:09
    • Propuesto como respuesta Carlos_Ruiz_M viernes, 22 de marzo de 2019 15:54
    viernes, 22 de marzo de 2019 1:50
  • hola, lo hice asi como tu respuesta pero se sigue quedando igual en la ultima fila, si crea la nueva fila pero el focus queda en la ultima columna y quisiera que quedara en la columna 0 de la nueva fila.
    viernes, 22 de marzo de 2019 1:57
  • Hola

    Ok intenta con esto

    en el constructor

    dgPoliza.KeyDown += dgPoliza_KeyDown;

    y en el evento

    private void dgPoliza_KeyDown(object sender, KeyEventArgs e)
            {
                e.SuppressKeyPress = true;
                int iColumn = dgPoliza.CurrentCell.ColumnIndex;
                int iRow = dgPoliza.CurrentCell.RowIndex;
                if (iColumn == 2)
                {
                    if (dgPoliza.RowCount > (iRow + 1))
                    {
                        dgPoliza.CurrentCell = dgPoliza[1, iRow + 1];
                    }
                    else
                    {
                        dgPoliza.CurrentCell.Selected = false;
                        dgPoliza.Rows.AddNew();
                        dgPoliza.Refresh();
                        dgPoliza.Rows[dataGridView1.Rows.Count - 1].Cells[0].Selected = true;
                    }
                }
                else
                    dgPoliza.CurrentCell = dgPoliza[iColumn + 1, iRow];
            }

    Y con eso creo que estara listo

    si te ha servido marcala como resuelto

    viernes, 22 de marzo de 2019 4:11