Imposible seleccionar en el datagrid filas insertadas recien insertadas

04/07/2004 - 05:09 por Oreades | Informe spam
Buenas. Estoy empezando en la programacion en C# aunque ya tenia experiencia
en el lenguaje JAVA, con lo cual algunas cosas de este nuevo lenguaje no me
pillan del todo desprevenido.

Estoy haciendo un programa windows forms utilizando una base de datos
Access. Para mostrar los datos utilizo una serie de controles enlazados a un
dataset ya creado y un datagrid que me muestra tanto la ID como el Titulo de
cada una de las entradas de la tabla. El problema es el siguiente. Para la
inserccion de nuevas filas en mi tabla utilizo la siguiente secuencia de
codigo:

BindingContext[objds, tablaActual].EndCurrentEdit();
BindingContext[this.objds.Tabla].AddNew();

Donde objds es el dataset correspondiente y tablaActual es un string que
indica la tabla actual con la que estoy trabajando. Una vez ejecutado este
codigo, se muestra el resultado inmediatamente despues en el datagrid, pero
si selecciono la fila recien insertada, no se mueve de manera interna el
puntero del dataset, es como si esa fila no existiera en el dataset.

Decidi cambiar el datagrid a un listview previamente modificado para que
acepte un dataset y muestre de manera automatica la tabla como si fuera un
datagrid. El codigo para insertar elementos es muy simple ya que me limito a
recorrer cada fila y columna del dataset correspondiente. Con esto me
muestra una tabla exactamente igual que el datagrid pero el error es el
mismo al seleccionar una fila recien insertada. Dicha fila se encuentra en
el dataset pero a la hora de dirigir el puntero con el siguiente codigo tras
seleccionar una fila insertada:

public void seleccion(int posicion) // Donde posicion es la posicion de la
fila seleccionada en el listview
{
System.Console.WriteLine("Posicion a mover: " + posicion.ToString()); //
Fila donde espero moverme
BindingContext[objds, tablaActual].Position = posicion;
System.Console.WriteLine("Posicion actual: " +
this.BindingContext[this.objdsAnime, this.tablaActual].Position.ToString());
// Fila donde finalmente

// me he movido
}

Observo que tras ejecutar el metodo Position, me redirige a la ultima
posicion donde me encontraba, no a la fila esperada.

Este es mi problema. Espero que alguien pueda solucionarmelo o que me
aconseje de alguna manera. Muchas gracias.
 

Leer las respuestas

#1 Leonardo Diez Dolinski
05/07/2004 - 11:07 | Informe spam
Hola Oreades,
No me queda muy claro tu problema, pero quizas esto te sirva:
En esta version de .NET los bindings se manejan a traves de la coleccion de
bindings del formulario (el objeto BindingContext que estas utilizando).
Esta coleccion identifica a cada vinculo por su orígen de datos. Pero cabe
la posibilidad de realizar un binding a un origen de datos de dos formas:
1- control.DataSource = dataset1.tabla1;
2- control.DataSource = dataset1;
control.DataMember = "tabla1";
Como puedes ver, las dos formas vinculan el control a la tabla1 del
dataset1, sin embargo tienen diferentes bindings. Para acceder a estos
bindings deberias en cada caso hacer:
1- this.BindingContext[dataset1.tabla1]
2- this.BindingContext[dataset1, "tabla1"]

Aqui es a donde queria llegar. Tu estás utilizando un binding para hacer el
EndCurrentEdit y otro para hacer el AddNew. Además, no se como has hecho el
binding a los controles. Deberías elegir una opción, hacer todos los
bindings de esa forma y luego acceder a los bindings de esa forma tambien.
Espero que mi explicación te sirva, y ante cualquier cosa no dudes en
consultar.

saludos,

Leonardo Diez Dolinski
MSCD - MVP
Equipo Danysoft


"Oreades" wrote in message
news:RxKFc.1325364$
Buenas. Estoy empezando en la programacion en C# aunque ya tenia


experiencia
en el lenguaje JAVA, con lo cual algunas cosas de este nuevo lenguaje no


me
pillan del todo desprevenido.

Estoy haciendo un programa windows forms utilizando una base de datos
Access. Para mostrar los datos utilizo una serie de controles enlazados a


un
dataset ya creado y un datagrid que me muestra tanto la ID como el Titulo


de
cada una de las entradas de la tabla. El problema es el siguiente. Para la
inserccion de nuevas filas en mi tabla utilizo la siguiente secuencia de
codigo:

BindingContext[objds, tablaActual].EndCurrentEdit();
BindingContext[this.objds.Tabla].AddNew();

Donde objds es el dataset correspondiente y tablaActual es un string que
indica la tabla actual con la que estoy trabajando. Una vez ejecutado este
codigo, se muestra el resultado inmediatamente despues en el datagrid,


pero
si selecciono la fila recien insertada, no se mueve de manera interna el
puntero del dataset, es como si esa fila no existiera en el dataset.

Decidi cambiar el datagrid a un listview previamente modificado para que
acepte un dataset y muestre de manera automatica la tabla como si fuera un
datagrid. El codigo para insertar elementos es muy simple ya que me limito


a
recorrer cada fila y columna del dataset correspondiente. Con esto me
muestra una tabla exactamente igual que el datagrid pero el error es el
mismo al seleccionar una fila recien insertada. Dicha fila se encuentra en
el dataset pero a la hora de dirigir el puntero con el siguiente codigo


tras
seleccionar una fila insertada:

public void seleccion(int posicion) // Donde posicion es la posicion de la
fila seleccionada en el listview
{
System.Console.WriteLine("Posicion a mover: " + posicion.ToString());


//
Fila donde espero moverme
BindingContext[objds, tablaActual].Position = posicion;
System.Console.WriteLine("Posicion actual: " +
this.BindingContext[this.objdsAnime,


this.tablaActual].Position.ToString());
// Fila donde finalmente

// me he movido
}

Observo que tras ejecutar el metodo Position, me redirige a la ultima
posicion donde me encontraba, no a la fila esperada.

Este es mi problema. Espero que alguien pueda solucionarmelo o que me
aconseje de alguna manera. Muchas gracias.


Preguntas similares