none
CODIGO PARA HACER CLICK EN UNA FILA DEL DATAGRIDVIEW Y PASE LA INFORMACIÓN A OTRO FORMULARIO

    Pregunta

  • Buenas tardes y un cordial saludo, el motivo de mi pregunta es sobre qué código realizó, cuando dé doble clic en una fila de los datos ya registrados del "datagridview", despues me abra el formulario 2 que contenga la misma información del "datagridview" pero únicamente se visualice la fila seleccionada  del "datagridview"que se encuentra en el formulario 1.

    Nota. lo que hice fue en lanzar el "datagridview" con el formulario 2 en este caso textbox para que sea una misma base de datos en dos formularios y aparezca la misma información... lo único que necesito es el código de dar doble click en una fila del "datagridview" y me abra el formulario 2 para que en breve me muestre la información de la fila seleccionada del "datagridview"

    Respecto a como enlace los datos..

    lo que hice fue hacer una misma base de datos, después irme a origen de datos y arrastrar el "datagridview" en el formulario 1, después ya en el formulario 2 me fui nuevamente a origen de datos y arrastrar ahora "detalles" así  se enlazo una misma base de datos en dos formulario pero con diferente diseño uno con el "datagridview" y otro con "detalles" que en su caso son texbox.

    el programa que uso es Microsoft Visual Studio 2015 . vb

    lo único que quiero es que al dar doble click en cada una de las filas del datagridview que se crean te abra el segundo formulario y se pase o visualices la información únicamente de la fila selecionada del datagridview


    de antemano muchas gracias espero su mensaje..




    viernes, 9 de diciembre de 2016 16:51

Respuestas

  • Christian Medellin,

    Lo siento, entonces no estoy entendiendo lo que deseas realizar. El ejemplo propuesto copia la fila seleccionada y la carga como fila única en una grilla de datos del formulario 'FormB', no sólo toma la primera fila sino cualquier fila seleccionada, algo como lo siguiente:

    Si lo que buscas es que los datos seleccionados se carguen en cuadros de texto (clase Textbox) entonces no hay nada distinto, lo único que debes de cambiar -del código propuesto- es lo siguiente:

    Private Sub FormB_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    	
    	txtId.Text = FilaSelecionada.Cells(0).Value.ToString
    	txtNombre.Text = FilaSelecionada.Cells(1).Value.ToString
    	txtEdad.Text = FilaSelecionada.Cells(2).Value.ToString
    
    End Sub

    Si lo que requieres es distinto a lo propuesto te agradeceré indicarlo con algo mas de claridad.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    viernes, 9 de diciembre de 2016 19:10
  • Christian Medellin,

    A ver si entendí, luego de presionar doble click sobre una fila -de la grilla de datos del formulario 'FormA'- deseas copiar la fila seleccionada a una grilla de datos que se encuentra en el formulario 'FormB', ¿verdad?. De ser así, ¿la grilla de datos del formulario 'FormB' contiene las mismas columnas que la grilla de datos del formulario 'FormA'? ¿Las columnas ya están creadas?. Si es así puedes hacer lo siguiente:

    - FormA

    Private Sub dgvA_CellDoubleClick(sender As Object, e As DataGridViewCellEventArgs)
    
    	Dim dgv As DataGridView = DirectCast(sender, DataGridView)
    
    	If dgv.CurrentRow IsNot Nothing Then
    		Dim FilaSeleccionada As DataGridViewRow =
    			DirectCast(dgv.CurrentRow.Clone(), DataGridViewRow)
    
    		For Each Celda As DataGridViewCell In dgv.CurrentRow.Cells
    			FilaSeleccionada.Cells(Celda.ColumnIndex).Value = Celda.Value
    		Next
    
    		Using f As New FormB(FilaSeleccionada)
    			If f.ShowDialog() = DialogResult.OK Then
    				'El formulario modal se ha cerrado, realizar acciones
    			End If
    		End Using
    	End If
    End Sub

    - FormB

    Public Class FormB
    
        Dim FilaSelecionada As DataGridViewRow
    
        Public Sub New()
    
            InitializeComponent()
    
        End Sub
    
        Public Sub New(FilaSelecionada As DataGridViewRow)
            Me.New()
    
            Me.FilaSelecionada = FilaSelecionada
    
        End Sub
    
        Private Sub FormB_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    
            dgvB.Rows.Add(Me.FilaSelecionada)
    
        End Sub
    
        Private Sub btnCerrar_Click(sender As Object, e As EventArgs) Handles btnCerrar.Click
    
            DialogResult = DialogResult.OK
    
        End Sub
    
    End Class


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    viernes, 9 de diciembre de 2016 18:17

Todas las respuestas

  • Hola,

    ¿Cómo cargas los Datos al DataGridView? 

    Esta es una opción, también puedes pasarle una clase tipada.

    En el formulario, por medio de un botón:

    private void button1_Click(object sender, EventArgs e)
    {
        List<DataGridViewRow> lstrows = new List<DataGridViewRow>();
    
        DataGridViewRow rSelected = new DataGridViewRow();
    
        foreach (DataGridViewRow rows in dataGridView1.SelectedRows)
            lstrows.Add(rows);
    
        Form2 f = new Form2(lstrows);
    
        f.Show();
    }

    En el segundo Form:

    private List<DataGridViewRow> MyListRow;
    
    public Form2(List<DataGridViewRow> lstRow)
    {
        MyListRow = new List<DataGridViewRow>();
    
        MyListRow = lstRow;
    
        InitializeComponent();
    }
    
    private void Form2_Load(object sender, EventArgs e)
    {
        dataGridView1.RowCount = MyListRow.Count;
    
        foreach (DataGridViewRow rows in MyListRow)
        {
            dataGridView1["colId", rows.Index].Value = rows.Cells["colId"].Value;
    
            dataGridView1["colNombres", rows.Index].Value = rows.Cells["colNombres"].Value;
    
            dataGridView1["colApellidos", rows.Index].Value = rows.Cells["colApellidos"].Value;
        }
    }


    Antonio Mata

    viernes, 9 de diciembre de 2016 17:43
  • Qué crees que no me funciono tu código lo converti de  C# a VB que es para donde lo necesito pero no me resulto... para hacer que realice la misma información en el otro formulario lo que hice fue hacer una misma base de datos, sacar el datagridview y en lanzarlo con la base de datos después al otro formulario a lugar de poner un textbox unos por uno le cambia a detalles y lo arrastre de igual manera pero en el formulario 2 asimismo tienen la misma información en dos formularios para eso me fui a visualizar origen de datos.

    viernes, 9 de diciembre de 2016 18:15
  • Christian Medellin,

    A ver si entendí, luego de presionar doble click sobre una fila -de la grilla de datos del formulario 'FormA'- deseas copiar la fila seleccionada a una grilla de datos que se encuentra en el formulario 'FormB', ¿verdad?. De ser así, ¿la grilla de datos del formulario 'FormB' contiene las mismas columnas que la grilla de datos del formulario 'FormA'? ¿Las columnas ya están creadas?. Si es así puedes hacer lo siguiente:

    - FormA

    Private Sub dgvA_CellDoubleClick(sender As Object, e As DataGridViewCellEventArgs)
    
    	Dim dgv As DataGridView = DirectCast(sender, DataGridView)
    
    	If dgv.CurrentRow IsNot Nothing Then
    		Dim FilaSeleccionada As DataGridViewRow =
    			DirectCast(dgv.CurrentRow.Clone(), DataGridViewRow)
    
    		For Each Celda As DataGridViewCell In dgv.CurrentRow.Cells
    			FilaSeleccionada.Cells(Celda.ColumnIndex).Value = Celda.Value
    		Next
    
    		Using f As New FormB(FilaSeleccionada)
    			If f.ShowDialog() = DialogResult.OK Then
    				'El formulario modal se ha cerrado, realizar acciones
    			End If
    		End Using
    	End If
    End Sub

    - FormB

    Public Class FormB
    
        Dim FilaSelecionada As DataGridViewRow
    
        Public Sub New()
    
            InitializeComponent()
    
        End Sub
    
        Public Sub New(FilaSelecionada As DataGridViewRow)
            Me.New()
    
            Me.FilaSelecionada = FilaSelecionada
    
        End Sub
    
        Private Sub FormB_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    
            dgvB.Rows.Add(Me.FilaSelecionada)
    
        End Sub
    
        Private Sub btnCerrar_Click(sender As Object, e As EventArgs) Handles btnCerrar.Click
    
            DialogResult = DialogResult.OK
    
        End Sub
    
    End Class


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    viernes, 9 de diciembre de 2016 18:17
  • Hola buen dia me he probado el codigo que me has brindado pero no resulto, solo me abre el formulario y nada mas me pasa la información de la primer fila, pero cuando selecciono la segunda fila del "datagridview" no me sale la información de la segunda fila seleccionada solo me abre nuevamente el formulario con la información de la primer fila selecionada...

    Respecto a como enlace los datos..

    lo que hice fue hacer una misma base de datos, después irme a origen de datos y arrastrar el "datagridview" en el formulario 1, después ya en el formulario 2 me fui nuevamente a origen de datos y arrastrar ahora "detalles" así  se enlazo una misma base de datos en dos formulario pero con diferente diseño uno con el "datagridview" y otro con "detalles" que en su caso son texbox.

    el programa que uso es Microsoft Visual Studio 2015 . vb

    lo único que quiero es que al dar doble click en cada una de las filas del datagridview que se crean te abra el segundo formulario y se pase o visualices la información únicamente de la fila selecionada del datagridview

    viernes, 9 de diciembre de 2016 18:37
  • Qué crees que no me funciono tu código lo converti de  C# a VB que es para donde lo necesito pero no me resulto... para hacer que realice la misma información en el otro formulario lo que hice fue hacer una misma base de datos, sacar el datagridview y en lanzarlo con la base de datos después al otro formulario a lugar de poner un textbox unos por uno le cambia a detalles y lo arrastre de igual manera pero en el formulario 2 asimismo tienen la misma información en dos formularios para eso me fui a visualizar origen de datos.

    Mi error, no vi el nombre del foro. Pensé que era C#.

    Antonio Mata

    viernes, 9 de diciembre de 2016 18:39
  • si ntp suele pasar :)
    viernes, 9 de diciembre de 2016 18:43

  • lo único que quiero es que al dar doble click en cada una de las filas del datagridview que se crean te abra el segundo formulario y se pase o visualices la información únicamente de la fila selecionada del datagridview

    ¿Quieres que al dar doble clic en cada fila se te agregue al form2?


    Antonio Mata

    viernes, 9 de diciembre de 2016 19:08
  • Christian Medellin,

    Lo siento, entonces no estoy entendiendo lo que deseas realizar. El ejemplo propuesto copia la fila seleccionada y la carga como fila única en una grilla de datos del formulario 'FormB', no sólo toma la primera fila sino cualquier fila seleccionada, algo como lo siguiente:

    Si lo que buscas es que los datos seleccionados se carguen en cuadros de texto (clase Textbox) entonces no hay nada distinto, lo único que debes de cambiar -del código propuesto- es lo siguiente:

    Private Sub FormB_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    	
    	txtId.Text = FilaSelecionada.Cells(0).Value.ToString
    	txtNombre.Text = FilaSelecionada.Cells(1).Value.ToString
    	txtEdad.Text = FilaSelecionada.Cells(2).Value.ToString
    
    End Sub

    Si lo que requieres es distinto a lo propuesto te agradeceré indicarlo con algo mas de claridad.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    viernes, 9 de diciembre de 2016 19:10
  • No que se me agrege mas bien que solo me Visualice esa fila selecionada por el usuario en el segundo formulario si selecciono otra fila de igual manera nada mas me visualice esa fila selecionada por el usuario, quiero hacer algo mas o menos como el programa de "business admin 9" algo asi se escribe es de hacienda.
    viernes, 9 de diciembre de 2016 19:12
  • Exactamente es lo que busco hizo todo lo que quería muchas gracias, que de verdad ese código lo estaba buscando por todas partes se te agradece mucho, que tengas una estupenda tarde y nuevamente gracias.
    viernes, 9 de diciembre de 2016 19:16