none
datagridview asociado con un bindingsource y agregarle filas manualmente RRS feed

  • Pregunta

  • Saludo  gente tengo un pequeño problema es que tengo un datagridview asociado con un bindingsource para que se llene  desde la base de dato  pero quiero agregarle nuevos datos al datagridview para  despues pasarlo a la base de dato pero cuando intento agregarle con el comando  datagridview.rows.add me da error  me  gustaria saber si no hay un modo de agregarle  los datos.
    lunes, 6 de febrero de 2012 17:38

Respuestas

  • Hola @Bodoke1,

    Imagino que el error que te aparece es el siguiente "InvalidOperationException" con el siguiente Texto:

    "No se pueden agregar filas mediante programación a la colección de filas de DataGridView cuando el control está enlazado a datos."

    Si es así y lo ves detenidamente te das cuenta que tu no puedes utilizar esta instrucción

    this.dataGridView1.Rows.Add(new object[] { 1, "Hola" });

    Puesto que como bien puedes ver no se puede agregar filas a un DataGridView mediante Rows.Add cuando este está enlazado a datos. Si tu lo tienes enlazado a un BindingSource y este a su vez a un DataSet que tiene un DataTable la forma de hacerlo sería a través del DataTable tal y como te muestro en el siguiente código.

     this.dataSet1.DataTable1.AddDataTable1Row(10, "Hola");

    Es sencillo, no puedes agregar datos mediante Rows.Add si el DataGridView está enlazado a Datos.

    Intenta en tus preguntas pasar la mayor información posible, que de esta forma se te puede ayudar mucho mejor :)

    Saludos,


    phurtado

    miércoles, 8 de febrero de 2012 9:42
    Moderador

Todas las respuestas

  • hola

    es que el registro no lo agregarias directo al datagridview, sino que lo harias al origen de datos

     

    DataTable dt = BindingSource1.DataSource as DataTable;

    DataRow row = dt.NewRow();

    row["campo1"] = valor;

    dt.Rows.Add(row);

    BindingSource1.DataSource = dt;

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    lunes, 6 de febrero de 2012 17:55
  • Estoy intentando la solucion que me brindaste pero me dice que no se puede  instancial el  objeto en la parte  que es  DataRow row = dt.NewRow();.
    martes, 7 de febrero de 2012 13:56
  • Hola,

    Te dice eso o esto "Referencia a objeto no establecida como instancia de un objeto.". Bueno pues yo creo que es esta última y es porque al pasar Leandro el código 

    DataTable dt = BindigSource1.DataSource as DataTable;

    lo que se hace es convertir el la propiedad DataSource del objeto BindingSource1 a DataTable aplicando "as" , que ocurre que cuando se hace eso se debería de preguntar por if (dt!=null), yo creo que ese es el problema.

    Sustituye el código que paso Leandro por este otro y el error se soluciona, pero que tipo de objeto es el que asignaste a DataSource ?

    DataTable dt = BindingSource1.DataSource as DataTable;
    if (dt!=null)
    {
    DataRow row = dt.NewRow();
    
    row["campo1"] = valor;
    
    dt.Rows.Add(row);
    
    BindingSource1.DataSource = dt;
    }

    Seguro que el DataSource es un DataTable, es que me temo que es otra cosa y no lo has mostrado:)

    Saludos,' 


    phurtado

    martes, 7 de febrero de 2012 14:11
    Moderador
  • mira lo k pasa es que tengo una datagridview  a donde  varios datos  de un  dataset que se carga atras ves de un bindingsource entonce  quiero agregarle a ese datagridview  datos nuevo para despues  darle a botton guardar  y se guarde lo nuevo que e agregado a datagridview pero mi problema es que cuando  quiero agregarle a datagridview  datos  me da el error  por el bindingsource  y no se que puedo hacer
    martes, 7 de febrero de 2012 16:38
  • Hola @Bodoke1,

    Pasanos si puedes como haces la carga o el código del formulario y te hechamos una mano.

    Saludos,


    phurtado

    martes, 7 de febrero de 2012 19:46
    Moderador
  • yo cargo el datagridview con un bindingsource que esta asociado  con el dataset  y kiero agregarle a datagridview linea con el comando add pero no me permite  y eso es lo k kiero ver si se puede k a un datagridview  que tiene asociado un bindingsource  agregarle  registro que no esta en esa base de dato para depues guardarla
    miércoles, 8 de febrero de 2012 3:53
  • Hola @Bodoke1,

    Imagino que el error que te aparece es el siguiente "InvalidOperationException" con el siguiente Texto:

    "No se pueden agregar filas mediante programación a la colección de filas de DataGridView cuando el control está enlazado a datos."

    Si es así y lo ves detenidamente te das cuenta que tu no puedes utilizar esta instrucción

    this.dataGridView1.Rows.Add(new object[] { 1, "Hola" });

    Puesto que como bien puedes ver no se puede agregar filas a un DataGridView mediante Rows.Add cuando este está enlazado a datos. Si tu lo tienes enlazado a un BindingSource y este a su vez a un DataSet que tiene un DataTable la forma de hacerlo sería a través del DataTable tal y como te muestro en el siguiente código.

     this.dataSet1.DataTable1.AddDataTable1Row(10, "Hola");

    Es sencillo, no puedes agregar datos mediante Rows.Add si el DataGridView está enlazado a Datos.

    Intenta en tus preguntas pasar la mayor información posible, que de esta forma se te puede ayudar mucho mejor :)

    Saludos,


    phurtado

    miércoles, 8 de febrero de 2012 9:42
    Moderador
  • Gracias men con tu respuesta  ya me esta funcionando muchisimas gracias  tu no sabes la vuelta que e dado para resolver eso  GRACIAS y me disculpo es que es mi primer foro que me siento a preguntar xD
    miércoles, 8 de febrero de 2012 14:42
  • Hola @Bodoke1,

    Imagino que el error que te aparece es el siguiente "InvalidOperationException" con el siguiente Texto:

    "No se pueden agregar filas mediante programación a la colección de filas de DataGridView cuando el control está enlazado a datos."

    Si es así y lo ves detenidamente te das cuenta que tu no puedes utilizar esta instrucción

    this.dataGridView1.Rows.Add(new object[] { 1, "Hola" });

    Puesto que como bien puedes ver no se puede agregar filas a un DataGridView mediante Rows.Add cuando este está enlazado a datos. Si tu lo tienes enlazado a un BindingSource y este a su vez a un DataSet que tiene un DataTable la forma de hacerlo sería a través del DataTable tal y como te muestro en el siguiente código.

     this.dataSet1.DataTable1.AddDataTable1Row(10, "Hola");

    Es sencillo, no puedes agregar datos mediante Rows.Add si el DataGridView está enlazado a Datos.

    Intenta en tus preguntas pasar la mayor información posible, que de esta forma se te puede ayudar mucho mejor :)

    Saludos,


    phurtado

    Hola:

    Me sirvió mucho de ayuda tu código, te doy las gracias por ello.

    Pero tengo un pequeño problema y es el siguiente,el primer campo de mi BD es el primary key y es de tipo auto numérico, cuando agrego la información a la nueva fila creada en el datagrid, no tengo ningún problema excepto con el primer campo que como comentaba es la primary key y es autonumerico, pero en vez de continuar con el siguiente numero (imaginemos que tengo 1000 registros y quiero añadir una fila mas), 1001, se me queda en -1 y no se el motivo por el cual ocurre esto.

    Otra cosa que desconozco es como actualizar la BD a partir del datagridview al que le he añadido X filas, me gustaría independientemente de actualizarlo al introducir datos de forma manual,poder editaar o borrar cualquier fila del datagrid y que se actualizasen dichos cambios en la BD.

    Disculpar las molestias,pero estoy empezando con el tema de BD.

    Muchísimas gracias por vuestra ayuda

    miércoles, 17 de abril de 2013 10:42