viernes, 9 de julio de 2010

Pasar datos de un DatagridView a un textbox

SALUDOS, en este post le mostrare un método para pasar datos de un registro desde un datagridview a un textbox . Necesitamos 3 argumentos:
1- El datagrid de donde seleccionaremos el registro. 2- El textbox donde mostraremos el valor deseado.
3- string Columna, es el nombre del campo que deseamos pasar al textbox. Veamos el método:

public void Pasarcampo(DataGridView midgv, TextBox txb, string columna)
{
    // especifico que campo de la fila que este seleccionada vamos a pasar al textbox

   txb.Text = midgv.Rows[midgv.CurrentRow.Index].Cells[columna].Value.ToString();

}


midgv.Rows : hace referencia a una fila del grid.
[midgv.CurrentRow.Index] :  especifica que fila tenemos seleccionada.
.Cells[columna].Value : Se refiere al valor de la celda que tenemos seleccionada en el grid, en donde columna es el nombre de la celda o campo.
ToString()  que es para convertir el valor del resultado en string para poder asignarlo a la propiedad text de nuestro textbox.
Lo guardamos en una clase, por ejemplo...  clase utilidad.

 Una forma de usarlo seria la siguiente:

utilidad u = new utilidad();

u.Pasarcampo(Midatagrid,mitextbox,"micolumna");

Ya esta. con esta linea implementas el método y lo que sucede es lo siguiente:
de Midatagrid, se selecciona la columna "micolumna" de la fila seleccionada y la muestro en mitexbox.
Si quieres pasar varios campos o todo u registro, hazlo de esta forma:

u.Pasarcampo(Midatagrid,mitextbox1,"micolumna1");
u.Pasarcampo(Midatagrid,mitextbox2,"micolumna2");
u.Pasarcampo(Midatagrid,mitextbox3,"micolumna3");
u.Pasarcampo(Midatagrid,mitextbox4,"micolumna4");

etc..  Espero haya sido útil.

32 comentarios:

  1. disculpen, se puede utilizar en visual studio 2010?

    ResponderEliminar
  2. Saludos, claro que si mi hermano. Lo puedes implementar tal cual esta, sin ningun problema. Recuerda crear tu clase generica para que este metodo lo puedas cargar y reutilizar en tantos proyectos como quieras. Asi haces una buena practica de lo que es orientacion a objetos y por consecuente la aplicacion te resultara mas flexible. Cualquier otra pregunta estamos a su orden. Solo disculpa por el tiempo de respuesta porque estoy en el trabajo y en la universidad y a veces no tengo tiempo de dar respuesta inmediata.

    ResponderEliminar
  3. gracias carnal, shido tu aporte

    ResponderEliminar
  4. excelente articulo mi pana, me ha servido bastante, soy seguidor de esta pagina y te felicito por tu excelente trabajo, feliz navidad.

    ResponderEliminar
  5. Gracias!! recuerda...cualquier pregunta me puedes escribir aquí o a los correos solocsharp@gmail, csharpenlinea@gmail.com!
    Feliz navidad!

    ResponderEliminar
  6. Para Visual Basic 2010 cual seria el codigo.
    Gracias de antemano.

    ResponderEliminar
  7. Para Visual Studio 2010 el código es el mismo. Recuerda que el código es mas propio del leguaje que uses y del FrameWork, pero no del IDE.
    Saludos!!

    ResponderEliminar
  8. Hola compañero muy buena aoportación yo quiero hacer lago similar, con varios tipos de campos, es decir que al dar clic a un registro del datagridview, me llene los campos textbox,combobox y un checkbox en ese mismo formulario.Porfavor te lo agradeceria si pudieras ayudarme.

    ResponderEliminar
  9. Debo aclarar que el datagridview carga los datos desde una base de datos sqlserver 2005

    ResponderEliminar
  10. Hola, hice la prueba, pero si creo el metodo en la clase Utilidad, me marca 2 errores:
    "Error, No se puede encontrar el tipo o el nombre de espacio de nombres 'DataGridView' (¿falta una directiva using o una referencia de ensamblado?)"
    "Error, No se puede encontrar el tipo o el nombre de espacio de nombres 'TextBox' (¿falta una directiva using o una referencia de ensamblado?)"

    ResponderEliminar
  11. Disculpa la tardanza! errores. Al parecer en alguna parte has escrito texbox donde necesitas especificar la propiedad text del textbox = textbox.text. al igual con el Datagridview!

    ResponderEliminar
  12. Otra cosa, si la aplicación es web, el termino DataGridView no es reconocido en ambiente web, en este caso se utiliza GridView!

    ResponderEliminar
  13. Para llenar el combo y el checkBox tambien podriamos agregarselos como parametros a la funcion pasarCampo. Prepare el codigo y te lo enviare!

    ResponderEliminar
  14. Hola Felix, me puedes ayudar como hago lo mismo con un cobobox gracias de antemano por tu atención

    ResponderEliminar
  15. Saludos, Bueno... en el caso de trabajar con el combo, en vez de tener como parametro segundo un textbox, utilizariamos un combobox, ej:

    public void Pasarcampo(DataGridView midgv, ComboBox cbo, string columna)
    {
    // especifico que campo de la fila que este seleccionada vamos a pasar al textbox

    cbo.Text = midgv.Rows[midgv.CurrentRow.Index].Cells[columna].Value.ToString();

    }

    Eso es todo. Incluso, poniendo este código en los eventos click y selection_changing del datagrid, la información que pasas al textbox o al combo en este caso, cambiara según vayas recorriendo el grid. Ademas, puedes usar un label también. Es bastante útil.

    ResponderEliminar
  16. y en caso de cambio de seleccion en el datagrid, es decir cuando se seleccione una fila me modifiquen automaticamente los textbox.

    como seria para vb 2010, Gracias

    ResponderEliminar
  17. saludos, te respondo omovil... en este caso se necesita el uso del evento SelectionChanged del DataGridView que se dispara cuando cambia la selección del grid es decir, lo que me preguntas. Entonces sería simplemente poner el mismo código que tienes para pasarlo al textbox, ponerlo tambien dentro del bloque del evento SelectionChanged del grid. Intentalo, cualquier cosa me vuelves a escribir. ;)

    ResponderEliminar
  18. Para el anonimo que le daba un error de... falta directiva using o referencia de ensamblado... de seguro te falta lo siguiente:

    using System.Windows.Forms();
    esta es la libreria para manejar todos los objetos textbox,label,datagrid,listview,combo, etc... esta es una de las principales librerias que normalmente la pone autonmatica vstudio cuando creas un formulario. que raro que no te aparecio. Saludos

    ResponderEliminar
  19. si quiero hacerlo, pero quiero hacerlo con dos form distintos, como lo hago? con variables staticas???

    ResponderEliminar
  20. hola buenas tardes Foro!!

    tengo una duda estoy haciendo una pagina web con base de datos donde muestro mis datos lo que quiero hacer es con un hyperlinkcolum darle click y habrir un popup donde muestre la informacion de de una celda en particular de la fila en la que le di click al hyperlink ya tengo el popup pero no puedo pasar los datos de la celda a un textbox del popup como le hago para pasar datos del gridview al textbox del popup..

    espero haberme explicado bien jejej.


    saludos!!!

    ResponderEliminar
  21. Muchas gracias por el aporte, me saco de apuros.
    Saludos desde Peru.

    ResponderEliminar
  22. como utilizarlo en una pagina.aspx
    rocha.ter01@hotmail.com
    le agradezco q me lo envien
    gracias

    ResponderEliminar
  23. hola, lo que yo quiero hacer es pasar datos de un grid a distintos textbox con la diferencia en que el grid esta en un formulario y los textbox en otro formulario. Me pueden explicar como hacerlo? Muchas gracias.

    ResponderEliminar
  24. Amigo tegno una pregunta, esto me sirve si tegno el datagrid y el txb en el mismo formulario, pero si tengo el datagrid en un formulario y el txb en otro como hago para direccionarlo. Gracias

    ResponderEliminar
  25. buenos tardes me podrian decir como paso datos de un datagrid a un label

    ResponderEliminar
  26. shit! lo unico que no se como hacer es como pasarle el nombre o numero de la columna que yo quiero a la variable columna.

    suponte que tengo 5 columnas, como le asigno la numero 2 a la variable columna?

    ResponderEliminar
  27. este mismo ejemplo pero en vb.net es?

    ResponderEliminar
  28. buen ejemplo, solo que como se le pasarian datos a un Label y a un Checkbox?

    ResponderEliminar
  29. Hice exactamente lo que dices y no me corre el programa a ver si alguien me ayuda a corregir el programa ya que es una practica de la Univ.

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;

    namespace Tarea_proyecto_contabilidad
    {
    public partial class Form1 : Form
    {
    public Form1()
    {
    InitializeComponent();
    }

    private void bttagregar_Click(object sender, EventArgs e)
    {
    dgvcontabilidad.Rows.Add(txtcuenta.Text, txtdescripcion.Text, cbbtipo.Text, txtmonto.Text);
    txtcuenta.Text = "";
    txtdescripcion.Text = "";
    cbbtipo.Text = "";
    txtmonto.Text = "";
    txtcuenta.Focus ();
    }

    private void cbbtipo_SelectedIndexChanged(object sender, EventArgs e)
    {
    MessageBox.Show("Se ha seleccionado la cuenta: " + cbbtipo.Text);

    }

    private void dgvcontabilidad_CellContentClick(object sender, DataGridViewCellEventArgs e)
    {
    // especifico que campo de la fila que este seleccionada vamos a pasar al textbox
    txtcuenta.Text = txtcuenta.Rows[txtcuenta.CurrentRow.Index].Cells[Column1].Value.ToString();
    }
    }
    }

    ResponderEliminar
  30. Hola buen aporte men pero me arroja un error:
    car.Pasarcampo(dataGridView1, txt4, "Column4"); <--------- Ninguna sobrecarga para el metodo 'Pasarcampo' toma '3' argumentos.......
    Alguna sugerencia o solución se agradece, Gracias.

    ResponderEliminar

DEJA UN COMENTARIO