none
copiar, pegar, borrar, insertar en datagridview enlazado a dataset por bindingsource, con base datos de sql server RRS feed

  • Pregunta

  • Hola,

     

    Despues de buscar soluciones y probar mucho, espero encontrar una solución, porque estoy metido en un geroglifico mental.

     

    Ahi voy....

     

    Tengo un grid enlazado por birdingsource a un dataset; donde he introducido los datos de un sql server.

     

    Estoy intentando crear los tipicos botones de borrar , copiar,  pegar, insertar (líneas).

     

    La verdad es que casí lo he conseguido pero, el borrar me va a matar. Me expllico:

     

    Cuando pulso a borrar: (borro la fila 1 y 2 grid tiene 10 filas)

     

    bindingsource.RemoveAt(fila_a_borrar) => el grid elimina las lineas borradas, el bindingsource.count dice que tengo 8 y

     

     y el dataset.datatable pone a estas lineas el rowstate como delete, ose count sigue siendo 10.

     

    Hasta aquí bien (que yo sepa = no se mucho)

     

    El problema Viene cuando quiero insertar o pegar una linea.

     

    imaginemos que quiero insertar una nueva linea en la posición 1 (antes era la 3)

     

    Dim fila As Datarow

    fila = dataset.tabla.NewRow

    dataset.nombre_tabla.InsertAt ( fila, 1)

     

    en vez de insertarlo en la posicion 1 lo inserta en posicion 0.

     

    Despues de borrar lineas este error es constante mientras tenga el programa funcionando. Si lo cierro y lo vuelvo a abrir me funciona todo bien. Pero en cuanto pulso a borrar......

     

    Creo que el problema viene porque el dataset en realidad no borra las lineas, si no que las pone como deleted y yo estoy insetando lineas no en el bindingsource ni en el datagridview sino en el dataset; pero no se como solucionarlo.

     

    Antes probe a borrar así: dataset.nombre_tabla.rows(fila).delete y el funcionamiento era el esperado pero cuando  pulsaba a guardar las fila borradas me volvian a aparecer. y lo entieno porque las fila ya no estaban como delete y el comando update no las tenia en cuenta.

     

    He estado buscando y buscando = no escuentro como solucionarlo.

     

    Muchas gracias

     

     

     

     

     

    martes, 27 de mayo de 2008 9:00

Respuestas

  • Como nadie me ha respondido = ya me respondo yo.

     

    Creo que tengo toda la operatividad de grid resuelta, permitiendo a los usuarios decidir si guardan modificaciones o no.

     

    El problema lo he resuelto del siguiente modo.

     

    en cargar datos, llamo a fill y despues duplico la tabla con un nombre tabla_temp.

     

    Cuando pulso boton borrar filas, si la fila.rowstate no es add estonces, copio la fila a tabla_temp y despues borro la fila de la tabla enlazada al grid = fila.rows.removeAt(num_fila). [es como si aparcara las fila que he borrado].

     

    Despues cuando pulsan a guardar , miro si tabla_temp.rows.count > 0 y si es asi, copio las filas de tabla_temp a tablabuena y en cada fila añadida tabla.rows.item(numero_de_fila).accepchages() para que el rowstate de la fila se ponga en unchage.

    y despues tabla.rows(numero_de_fila).delete  => me pone el estado de la fila a delete.

     

    por tanta cuando llamo al metodo update al ver que la fila esta delete, la borra de la base datos.

     

    Lo he probado y funciona  = pero si alguien tiene una forma mejor.

     

    viernes, 30 de mayo de 2008 7:44