Tengo un DataGridView en mi aplicación WinForm en C# 3.5.

AllowUserToAddNewRow propiedad se establece en true. Cuando el usuario escribe cualquier texto en el DataGridView, otra nueva fila se agrega automáticamente a DataGridView. No quiero que esta nueva fila se agrega hasta que algunas comprobaciones se realizan en la fila actual y toda la información necesaria ha sido rellenado allí.

Ejemplo : tengo un DataGridView con una fila en blanco:
La prevención de una nueva fila de aparecer en un DataGridView antes de la fila actual está lleno?

Cuando me pongo a escribir se agrega una nueva fila, que es demasiado pronto:
La prevención de una nueva fila de aparecer en un DataGridView antes de la fila actual está lleno?

Lo que yo quiero es que la nueva fila se agrega sólo después de que el usuario entra en una Cantidad:
La prevención de una nueva fila de aparecer en un DataGridView antes de la fila actual está lleno?

5 Comentarios

  1. 4

    Conjunto AllowUserToAddNewRow = false
    Ahora agregue una fila en blanco inicialmente para el origen de datos por ejemplo. si va a enlazar el DataGridView a un DataTable llamada DT, a continuación, justo antes de

    dataGridView1.DataSource = DT;

    Hacer algo como

     DT.Rows.Add(DT.NewRow());

    Esto es tener una fila en blanco inicialmente, de modo que el primer registro se pueden introducir.
    A continuación, controlar el evento dataGridView1.CellEndEdit, en ese caso escribir algo como esto:

    void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
            if (e.ColumnIndex == 1)//The index of your Quantity Column
            {
                int qty = (int)DT.Rows[e.RowIndex][e.ColumnIndex];
                if (qty > 0)//Your logic if required
                {
                    DT.Rows.Add(DT.NewRow());                    
                }
            }
        }
    • no hay ningún evento para suprimir la fila agregar comando
    • Lo siento, no podían entender que…¿a qué te refieres suprimir la fila agregar? Si te refieres a que la nueva fila no debe ser añadido en el DataGrid, a continuación, acaba de Establecer AllowUserToAddNewRow = false como mencioné en la primera línea de arriba
    • Quiero Fila debe agregar condicionalmente
    • Yo creo que eso es lo que estamos tratando de lograr aquí. La idea es que las Filas nunca agregar automáticamente (esto se consigue mediante la configuración de AllowUserToAddNewRow a False, tengo la sensación de que te falta esto). Una vez que se establece esta propiedad en false nuevas filas nunca va a agregar, entonces, ¿cómo usted, a continuación, agregar nuevas filas? Agrega una nueva fila a la base del origen de datos y hacer que la «condicional», es decir, cuando dicen que Cantidad es mayor que 0 como he mostrado en la CellEndEdit ebent controlador de código anterior.
    • yeh! he conseguido esta solución, pero en esta solución no tenemos ningún NewRow por lo que no podemos identificar la fila que es nuevo. pero aunque he resuelto mi problema con esta solución, gracias
  2. 3

    Básicamente, es un juego simple con algunos eventos y activación/desactivación de la AllowUserToAddRow propiedad:

    public Form1()
            {
                InitializeComponent();
                //creating a test DataTable and adding an empty row
                DataTable dt = new DataTable();
                dt.Columns.Add("Column1");
                dt.Columns.Add("Column2");
                dt.Rows.Add(dt.NewRow());
    
                //binding to the gridview
                dataGridView1.DataSource = dt;
    
                //Set  the property AllowUserToAddRows to false will prevent a new empty row
                dataGridView1.AllowUserToAddRows = false;
            }

    Ahora los eventos…
    Cuando la célula reconocer la edición que se disparará un evento llamado CellBeginEdit. Cuando está en el modo de edición de establecer el AllowUserToAddRows a false

    private void dataGridView1_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
    {
        dataGridView1.AllowUserToAddRows = false;
    }

    Cuando la célula se reconoce el final de la edición que se disparará un evento llamado CellEndEdit. Cuando se termina el modo de edición de verificación de sus condiciones. Basado en el resultado conjunto de la AllowUserToAddRows a la verdadera ot mantener falsa.

    private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
    {
        //instead of MessageBox there could be as well your check conditions
        if (MessageBox.Show("Cell edit finished, add a new row?", "Add new row?", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
            dataGridView1.AllowUserToAddRows = true;
        else dataGridView1.AllowUserToAddRows = false;
    }
  3. 0

    Creo que en el caso de CellClick puede comprobar en la columna que usted y, a continuación, añadir una nueva fila, algo así como : DataGridView1.Rows.Add()

    • no es necessory usuario navega por el ratón, puede ser que las interfaces con el teclado
  4. 0

    Esta es la forma en que se logra.

    a) Se puede verificar el contenido de la fila actual en RowLeave evento utilizando

    String.IsNullOrWhiteSpace(GridPGLog.Rows[e.RowIndex].Cells[0].value.toString())
    using (or) Cells[0] || cells[1] || cell[2] || ..

    caso de cualquier error que se encuentra, establecer el foco en el error de la célula y se fuerza al usuario a introducir los datos.

    DataGridViewRow rowToSelect = this.dgvJobList.CurrentRow;
    rowToSelect.Selected = true;
    rowToSelect.Cells[0].Selected = true;
    this.dgvJobList.CurrentCell = rowToSelect.Cells[0];

    b) o puedes colocar un botón de Guardar y comprobar todas las filas recién agregadas utilizando un bucle foreach

    • lo que se mencionó anteriormente esto se puede lograr muy fácilmente en RowValidating evento por correo.Cancel = true, pero quiero que la nueva fila no debe agregar si la fila actual es que no se llena.
    • si se ejecuta, el usuario no será capaz de concentrarse fuera de la fila para añadir una nueva fila
    • pero esta no es la respuesta que estoy buscando
    • sólo quiero suprimir la fila agregar
  5. 0

    Sé que esto es viejo.
    La forma más fácil es, desmarque la opción «Habilitar Agregando que» de la vista de diseño

    La prevención de una nueva fila de aparecer en un DataGridView antes de la fila actual está lleno?

    • Este es por lejos la forma más fácil de resolver el extra fila vacía que aparece cuando no es necesario.

Dejar respuesta

Please enter your comment!
Please enter your name here