none
Arrastrar DataGridView RRS feed

Respuestas

  • Hola,

    Primeramente es C# o Vb.Net.

    Segundo, tus 2 dataGridViews se encuentran en el mismo formulario?

    Tercero, como cargas los datos en el DGV, usas Base de datos?

    [-] Pero como hago para que el dataGridView de destino se de cuenta de que le añado un DataGridRow?

    En el evento DoubleClick agregas la nueva fila, para que se refleje en el dataGridView de destino.

    Pero antes activar estas opciones del DGV.

    'Que no permita seleccionar varias filas
    MultiSelect = False
    
    'Que se seleccione toda la fila
    SelectionMode = FullRowSelect

     Private Sub DataGridView1_CellDoubleClick(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellDoubleClick
    
            'Tengo 2 columnas (0, 1) en DGV1
    
            'Obtengo la fila seleccionada
            Dim i As Integer = DataGridView1.SelectedRows(0).Index
    
    
            'Paso la fila al DGV2 que tiene 2 campos también
            DataGridView2.Rows.Add(DataGridView1.Rows(i).Cells(0).Value,
                                   DataGridView1.Rows(i).Cells(1).Value)
    
        End Sub

    Resultado :

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta tximas jueves, 14 de abril de 2016 7:44
    miércoles, 13 de abril de 2016 14:26

Todas las respuestas

  • Creo que ambas opciones son factibles.  ¿Puede usted listar algunos criterios para ayudarnos a decidir?  Usted no nos provee de ningún contexto así que supongo que cada quien le responderá basado en su propia experiencia.  ¿Es eso lo que desea?  En mi experiencia, me daría igual uno u otro.  Con suerte más bien habilitaría ambos métodos.

    Jose R. MCP
    Code Samples

    martes, 12 de abril de 2016 13:57
    Moderador
  • Hola,

    Particularmente, cuando selecciono filas de un DGV  a otro agrego una columna de tipo CheckBox, para que el usuario pueda seleccionar las filas que desee, y mediante un botón recorrer las filas y obtener las selecciones para poder pasar los datos al DGV de destino.

    [-] .... un DataGridView a otro, arrastrándolos o seleccionandolo 

    Si quieres arrastrar las filas usarías Drag&Drop, pero no te lo recomendaría.

    También puedes pasar las filas dando DoubleClick a la fila, con el evento CellDoubleClick.

    En fin, como no tienes un requerimiento exacto, es decisión tuya, como implementarlo.

    Saludos.



    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    martes, 12 de abril de 2016 16:41
  • Me gusta la idea de hacerlo con doble click.

    Pero como hago para que el dataGridView de destino

    se de cuenta de que le añado un DataGridRow?

    miércoles, 13 de abril de 2016 6:55
  • Yo siempre trabajo con vinculación a datos.  Eso quiere decir que yo asigno una colección tipo BindingList<> a la propiedad DataSource del DGV.  Si usted tiene 2 DGV, yo tendría dos de estas colecciones, una para cada grilla.  ¿Cómo se pasan los datos?  Muy fácil:  El dato que quiere pasar de un DGV a otro se pasa simplemente pasando el elemento de la colección del DGV fuente a la colección del DGV destino.  Todo lo demás es automático:  Ambas grillas se darán cuenta del cambio y actualizarán sus filas.

    Como ejemplo rápido le muestro esto:

    //Una clase que representa los datos de la grilla:
    public class Dato : INotifyPropertyChanged
    {
        //INotifyPropertyChanged es super útil.
        #region INotifyPropertyChanged
        public event PropertyChangedEventHandler PropertyChanged;
        protected void RaisePropertyChanged(string propertyName)
        {
            PropertyChangedEventHandler ev = PropertyChanged;
            if (ev != null)
            {
                ev(this, new PropertyChangedEventArgs(propertyName));
            }
        }
        protected bool SetAndRaise<T>(ref T storage, T newValue, [CallerMemberName] string propertyName = null)
        {
            bool changed = !Object.Equals(storage, newValue);
            if (changed)
            {
                storage = newValue;
                RaisePropertyChanged(propertyName);
            }
            return changed;
        }
        #endregion
    
        //Propiedades que se verán en el DGV.  Si desea ocultar alguna, aplique [Browsable(false)].
        #region Properties
        private string _dato1;
        public string Dato1
        {
            get { return _dato1; }
            set { SetAndRaise(_dato1, value); }
        }
        private int _dato2;
        public int Dato2
        {
            get { return _dato2; }
            set { SetAndRaise(_dato2, value); }
        }
        #endregion
    }
    
    //Ahora en el formulario declara 2 listas, una para cada DGV, y a nivel de formulario.
    private BindingList<Dato> _grilla1;
    private BindingList<Dato> _grilla2;
    
    //En el Form_Load u otro evento conveniente, llene la o las listas, digamos desde base de datos.
    _grilla1 = new BindingList<Dato>(CapaNegocio.ObtenerDatos());
    //DGV2 va vacío en este ejemplo.
    _grilla2 = new BindingList<Dato>();
    dgv1.DataSource = _grilla1;
    dgv2.DataSource = _grilla2;
    
    //Listo.  Ahora en el evento de doble click de la grilla 1 mueve el elemento seleccionado de una colección a otra.
    
    private void dgv1_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
    {
        int index = e.RowIndex;
        Dato d = _grilla1[index];
        _grilla1.RemoveAt(index);
        _grilla2.Add(d);
    }
    

    Jose R. MCP
    Code Samples

    miércoles, 13 de abril de 2016 14:14
    Moderador
  • Hola,

    Primeramente es C# o Vb.Net.

    Segundo, tus 2 dataGridViews se encuentran en el mismo formulario?

    Tercero, como cargas los datos en el DGV, usas Base de datos?

    [-] Pero como hago para que el dataGridView de destino se de cuenta de que le añado un DataGridRow?

    En el evento DoubleClick agregas la nueva fila, para que se refleje en el dataGridView de destino.

    Pero antes activar estas opciones del DGV.

    'Que no permita seleccionar varias filas
    MultiSelect = False
    
    'Que se seleccione toda la fila
    SelectionMode = FullRowSelect

     Private Sub DataGridView1_CellDoubleClick(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellDoubleClick
    
            'Tengo 2 columnas (0, 1) en DGV1
    
            'Obtengo la fila seleccionada
            Dim i As Integer = DataGridView1.SelectedRows(0).Index
    
    
            'Paso la fila al DGV2 que tiene 2 campos también
            DataGridView2.Rows.Add(DataGridView1.Rows(i).Cells(0).Value,
                                   DataGridView1.Rows(i).Cells(1).Value)
    
        End Sub

    Resultado :

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta tximas jueves, 14 de abril de 2016 7:44
    miércoles, 13 de abril de 2016 14:26