Dataset y Threads

13/08/2004 - 15:22 por Joan Carles Jiménez | Informe spam
Hola a tod@s.

Tengo un par de problemas que no encuentro solución.

1) Tengo un dataset que me gustaria cargar en otro hilo para no bloquear la
aplicació/ordenador en caso de que el numero de registros sea elevado. He
mirado como lo hace los ejemplos del .NET pero parece ser que no funcionan
del todo bien. Cuando hago el fill del dataset, se queda clavado hasta que
ha acabado de cargar los registros. ¿Alguna idea (o esquema) de como montar
el sistema?

2) Una vez cargado el dataset, lo muestro en un datagrid. En la carga
inicial, el indice del dataset y del datagrid coinciden y cuando hago click
sobre una fila del datagrid, muestro la información en la ficha del registro
haciendo coincidir los índices. El problema està cuando ordeno alguna
columna del datagrid. Los indices ya no coinciden. ¿Cómo puedo saber la
posición del dataset a la cual pertenece un registro del datagrid?

Espero haberme explicado bien. Sinó, aquí estoi para aclarecer cualquier
duda. Gracias por adelantado.

Joan Carles Jiménez
jcjimenez@infomail.lacaixa.es

Preguntas similare

Leer las respuestas

#1 pablo crosio
13/08/2004 - 18:16 | Informe spam
hola!

te paso un ejemplo para 1):

using System;
using System.Threading;
using System.Data;
using System.Data.OleDb;

public class HebraDeTrabajo
{
public static void HacerTrabajo()
{
DataSet ds = new DataSet();
OleDbDataAdapter da = new OleDbDataAdapter("SELECT *
FROM xxx", new OleDbConnection("Provider=...;Data
Source=...;..."));
da.Fill(ds);
Console.WriteLine("ds.Tables[0].Rows.Count: {0}",
ds.Tables[0].Rows.Count);
}
}
class HebraPrincipal
{
public static void Main()
{
ThreadStart miDelegado = new ThreadStart
(HebraDeTrabajo.HacerTrabajo);
Thread miHebra = new Thread(miDelegado);
miHebra.Start();
for(int i = 0; i<10; i++)
{
Console.WriteLine("Hebra principal activa.");
Thread.Sleep(1000);
}
}
}

fijate que el mensaje sale sin bloquerse mientras se carga
el DataSet

con respecto a 2) realmente no entiendo el problema
hoy es viernes!

salu2!!

pablo



Hola a

Tengo un par de problemas que no encuentro solución.

1) Tengo un dataset que me gustaria cargar en otro hilo


para no bloquear la
aplicació/ordenador en caso de que el numero de registros


sea elevado. He
mirado como lo hace los ejemplos del .NET pero parece ser


que no funcionan
del todo bien. Cuando hago el fill del dataset, se queda


clavado hasta que
ha acabado de cargar los registros. ¿Alguna idea (o


esquema) de como montar
el sistema?

2) Una vez cargado el dataset, lo muestro en un datagrid.


En la carga
inicial, el indice del dataset y del datagrid coinciden y


cuando hago click
sobre una fila del datagrid, muestro la información en la


ficha del registro
haciendo coincidir los índices. El problema està cuando


ordeno alguna
columna del datagrid. Los indices ya no coinciden. ¿Cómo


puedo saber la
posición del dataset a la cual pertenece un registro del


datagrid?

Espero haberme explicado bien. Sinó, aquí estoi para


aclarecer cualquier
duda. Gracias por adelantado.

Joan Carles Jiménez




.

Respuesta Responder a este mensaje
#2 Joan Carles Jiménez
13/08/2004 - 18:40 | Informe spam
Hola de nuevo.

Primero, gracias por la ayuda. Respecto al punto dos mes explicaré
mejor. Tengo un formulario formado por un datagrid en la parte superior y
los textbox respectivos a cada columna en la parte inferior. Tanto el
datagrid como los textbox, estan vinculados (databinding) a una tabla de un
dataset de manera que cuando cargo el dataset, veo todos los registros en el
datagrid y el registro seleccionado en los textbox (para hacer altas,
modificaciones, ...). Pues bien, si no ordeno las columnas del datagrid, la
propiedad Position del dataset i el indice de la fila activa del datagrid
coinciden por lo que en los textbox me muestra los datos correctos. Pero si
el usuario ordena cualquier columna del datagrid, los indices no coinciden y
los datos que cargo en los textbox no son los de la fila seleccionada en el
datagrid. La instrucción que actualizo actualmente és ...

this.BindingContext[dataSetAgentes, "Agentes"].Position dataGridAgentes.CurrentRowIndex;

La pregunta es ¿Cómo puedo sincronizar el datagrid con los textbox?

Gracias de nuevo.

Joan Carles Jiménez



"pablo crosio" escribió en el mensaje
news:5abc01c48150$f22bf3b0$

hola!

te paso un ejemplo para 1):

using System;
using System.Threading;
using System.Data;
using System.Data.OleDb;

public class HebraDeTrabajo
{
public static void HacerTrabajo()
{
DataSet ds = new DataSet();
OleDbDataAdapter da = new OleDbDataAdapter("SELECT *
FROM xxx", new OleDbConnection("Provider=...;Data
Source=...;..."));
da.Fill(ds);
Console.WriteLine("ds.Tables[0].Rows.Count: {0}",
ds.Tables[0].Rows.Count);
}
}
class HebraPrincipal
{
public static void Main()
{
ThreadStart miDelegado = new ThreadStart
(HebraDeTrabajo.HacerTrabajo);
Thread miHebra = new Thread(miDelegado);
miHebra.Start();
for(int i = 0; i<10; i++)
{
Console.WriteLine("Hebra principal activa.");
Thread.Sleep(1000);
}
}
}

fijate que el mensaje sale sin bloquerse mientras se carga
el DataSet

con respecto a 2) realmente no entiendo el problema
hoy es viernes!

salu2!!

pablo



Hola a

Tengo un par de problemas que no encuentro solución.

1) Tengo un dataset que me gustaria cargar en otro hilo


para no bloquear la
aplicació/ordenador en caso de que el numero de registros


sea elevado. He
mirado como lo hace los ejemplos del .NET pero parece ser


que no funcionan
del todo bien. Cuando hago el fill del dataset, se queda


clavado hasta que
ha acabado de cargar los registros. ¿Alguna idea (o


esquema) de como montar
el sistema?

2) Una vez cargado el dataset, lo muestro en un datagrid.


En la carga
inicial, el indice del dataset y del datagrid coinciden y


cuando hago click
sobre una fila del datagrid, muestro la información en la


ficha del registro
haciendo coincidir los índices. El problema està cuando


ordeno alguna
columna del datagrid. Los indices ya no coinciden. ¿Cómo


puedo saber la
posición del dataset a la cual pertenece un registro del


datagrid?

Espero haberme explicado bien. Sinó, aquí estoi para


aclarecer cualquier
duda. Gracias por adelantado.

Joan Carles Jiménez




.

Respuesta Responder a este mensaje
#3 Vyacheslav Popov
17/08/2004 - 20:40 | Informe spam
Hola Juan.

Creo que si intentas enlazar los datos del siguiente
modo, debería funcionar:

dataGrid.SetDataBinding(dataSetAgentes, "Agentes");
textBox.DataBindings( new Binding("Text",
dataSetAgentes, "Agentes.Columna") );

Suerte...

Hola de nuevo.

Primero, gracias por la ayuda. Respecto al punto dos


mes explicaré
mejor. Tengo un formulario formado por un datagrid en la


parte superior y
los textbox respectivos a cada columna en la parte


inferior. Tanto el
datagrid como los textbox, estan vinculados


(databinding) a una tabla de un
dataset de manera que cuando cargo el dataset, veo todos


los registros en el
datagrid y el registro seleccionado en los textbox (para


hacer altas,
modificaciones, ...). Pues bien, si no ordeno las


columnas del datagrid, la
propiedad Position del dataset i el indice de la fila


activa del datagrid
coinciden por lo que en los textbox me muestra los datos


correctos. Pero si
el usuario ordena cualquier columna del datagrid, los


indices no coinciden y
los datos que cargo en los textbox no son los de la fila


seleccionada en el
datagrid. La instrucción que actualizo actualmente és ...

this.BindingContext


[dataSetAgentes, "Agentes"].Position >dataGridAgentes.CurrentRowIndex;

La pregunta es ¿Cómo puedo sincronizar el datagrid con


los textbox?

Gracias de nuevo.

Joan Carles Jiménez



"pablo crosio" escribió en


el mensaje
news:5abc01c48150$f22bf3b0$

hola!

te paso un ejemplo para 1):

using System;
using System.Threading;
using System.Data;
using System.Data.OleDb;

public class HebraDeTrabajo
{
public static void HacerTrabajo()
{
DataSet ds = new DataSet();
OleDbDataAdapter da = new OleDbDataAdapter("SELECT


*
FROM xxx", new OleDbConnection("Provider=...;Data
Source=...;..."));
da.Fill(ds);
Console.WriteLine("ds.Tables[0].Rows.Count: {0}",
ds.Tables[0].Rows.Count);
}
}
class HebraPrincipal
{
public static void Main()
{
ThreadStart miDelegado = new ThreadStart
(HebraDeTrabajo.HacerTrabajo);
Thread miHebra = new Thread(miDelegado);
miHebra.Start();
for(int i = 0; i<10; i++)
{
Console.WriteLine("Hebra principal activa.");
Thread.Sleep(1000);
}
}
}

fijate que el mensaje sale sin bloquerse mientras se


carga
el DataSet

con respecto a 2) realmente no entiendo el problema
hoy es viernes!

salu2!!

pablo



Hola a

Tengo un par de problemas que no encuentro solución.

1) Tengo un dataset que me gustaria cargar en otro hilo


para no bloquear la
aplicació/ordenador en caso de que el numero de




registros
sea elevado. He
mirado como lo hace los ejemplos del .NET pero parece




ser
que no funcionan
del todo bien. Cuando hago el fill del dataset, se queda


clavado hasta que
ha acabado de cargar los registros. ¿Alguna idea (o


esquema) de como montar
el sistema?

2) Una vez cargado el dataset, lo muestro en un




datagrid.
En la carga
inicial, el indice del dataset y del datagrid coinciden




y
cuando hago click
sobre una fila del datagrid, muestro la información en




la
ficha del registro
haciendo coincidir los índices. El problema està cuando


ordeno alguna
columna del datagrid. Los indices ya no coinciden. ¿Cómo


puedo saber la
posición del dataset a la cual pertenece un registro del


datagrid?

Espero haberme explicado bien. Sinó, aquí estoi para


aclarecer cualquier
duda. Gracias por adelantado.

Joan Carles Jiménez




.





.

Respuesta Responder a este mensaje
#4 anonymous
21/08/2004 - 03:05 | Informe spam
Yo también tengo el mismo problema. En el dataGrid muestro la info que tengo
de un DataView y al hacer un filtro u ordenación no me liga los datos a los
textbox.
La solución que propones es lo que tengo hecho pero no funciona.(si se usa
por ejemplo la defaultView de la tabla lo hace bien pero al cambiar el
RowFilter deja de funcionar la ligadura de datos con la vista que muestro en
el DataGird).
Puede que tenga relación con el CurrencyManager del BindingContexta lo
mejor se ha hecho un lio.
Si alguien descubre algoyo lo seguiré intentando.

"Vyacheslav Popov" wrote:

Hola Juan.

Creo que si intentas enlazar los datos del siguiente
modo, debería funcionar:

dataGrid.SetDataBinding(dataSetAgentes, "Agentes");
textBox.DataBindings( new Binding("Text",
dataSetAgentes, "Agentes.Columna") );

Suerte...

>Hola de nuevo.
>
> Primero, gracias por la ayuda. Respecto al punto dos
mes explicaré
>mejor. Tengo un formulario formado por un datagrid en la
parte superior y
>los textbox respectivos a cada columna en la parte
inferior. Tanto el
>datagrid como los textbox, estan vinculados
(databinding) a una tabla de un
>dataset de manera que cuando cargo el dataset, veo todos
los registros en el
>datagrid y el registro seleccionado en los textbox (para
hacer altas,
>modificaciones, ...). Pues bien, si no ordeno las
columnas del datagrid, la
>propiedad Position del dataset i el indice de la fila
activa del datagrid
>coinciden por lo que en los textbox me muestra los datos
correctos. Pero si
>el usuario ordena cualquier columna del datagrid, los
indices no coinciden y
>los datos que cargo en los textbox no son los de la fila
seleccionada en el
>datagrid. La instrucción que actualizo actualmente és ...
>
> this.BindingContext
[dataSetAgentes, "Agentes"].Position > >dataGridAgentes.CurrentRowIndex;
>
>La pregunta es ¿Cómo puedo sincronizar el datagrid con
los textbox?
>
>Gracias de nuevo.
>
>Joan Carles Jiménez
>
>
>
>"pablo crosio" escribió en
el mensaje
>news:5abc01c48150$f22bf3b0$
>
>hola!
>
>te paso un ejemplo para 1):
>
>using System;
>using System.Threading;
>using System.Data;
>using System.Data.OleDb;
>
>public class HebraDeTrabajo
>{
> public static void HacerTrabajo()
> {
> DataSet ds = new DataSet();
> OleDbDataAdapter da = new OleDbDataAdapter("SELECT
*
>FROM xxx", new OleDbConnection("Provider=...;Data
>Source=...;..."));
> da.Fill(ds);
> Console.WriteLine("ds.Tables[0].Rows.Count: {0}",
>ds.Tables[0].Rows.Count);
> }
>}
>class HebraPrincipal
>{
> public static void Main()
> {
> ThreadStart miDelegado = new ThreadStart
>(HebraDeTrabajo.HacerTrabajo);
> Thread miHebra = new Thread(miDelegado);
> miHebra.Start();
> for(int i = 0; i<10; i++)
> {
> Console.WriteLine("Hebra principal activa.");
> Thread.Sleep(1000);
> }
> }
>}
>
>fijate que el mensaje sale sin bloquerse mientras se
carga
>el DataSet
>
>con respecto a 2) realmente no entiendo el problema
>hoy es viernes!
>
>salu2!!
>
>pablo
>
>
>
>>Hola a
>>
>> Tengo un par de problemas que no encuentro solución.
>>
>>1) Tengo un dataset que me gustaria cargar en otro hilo
>para no bloquear la
>>aplicació/ordenador en caso de que el numero de
registros
>sea elevado. He
>>mirado como lo hace los ejemplos del .NET pero parece
ser
>que no funcionan
>>del todo bien. Cuando hago el fill del dataset, se queda
>clavado hasta que
>>ha acabado de cargar los registros. ¿Alguna idea (o
>esquema) de como montar
>>el sistema?
>>
>>2) Una vez cargado el dataset, lo muestro en un
datagrid.
>En la carga
>>inicial, el indice del dataset y del datagrid coinciden
y
>cuando hago click
>>sobre una fila del datagrid, muestro la información en
la
>ficha del registro
>>haciendo coincidir los índices. El problema està cuando
>ordeno alguna
>>columna del datagrid. Los indices ya no coinciden. ¿Cómo
>puedo saber la
>>posición del dataset a la cual pertenece un registro del
>datagrid?
>>
>> Espero haberme explicado bien. Sinó, aquí estoi para
>aclarecer cualquier
>>duda. Gracias por adelantado.
>>
>>Joan Carles Jiménez
>>
>>
>>
>>
>>.
>>
>
>
>.
>

Respuesta Responder a este mensaje
#5 Vyacheslav Popov
23/08/2004 - 10:58 | Informe spam
Saludos a todos. La otra solución, un poco más complicada es enlazar con
CurrencyManager:

public void Enlazar (CurrencyManager cm)
{
DataRowView drv = cm.Current as DataRowView;
DataView dv = drv.DataView;
textBox1.DataBindings.Add( new Binding("Text", dv, "Agentes.Columna");
/*...*/
BindingContext[dv].Position = cm.Position;
}

Espero que esto resuelbe el problema.
Saludos
"anonymous" escribió en el mensaje
news:
Yo también tengo el mismo problema. En el dataGrid muestro la info que


tengo
de un DataView y al hacer un filtro u ordenación no me liga los datos a


los
textbox.
La solución que propones es lo que tengo hecho pero no funciona.(si se usa
por ejemplo la defaultView de la tabla lo hace bien pero al cambiar el
RowFilter deja de funcionar la ligadura de datos con la vista que muestro


en
el DataGird).
Puede que tenga relación con el CurrencyManager del BindingContexta lo
mejor se ha hecho un lio.
Si alguien descubre algoyo lo seguiré intentando.

"Vyacheslav Popov" wrote:

> Hola Juan.
>
> Creo que si intentas enlazar los datos del siguiente
> modo, debería funcionar:
>
> dataGrid.SetDataBinding(dataSetAgentes, "Agentes");
> textBox.DataBindings( new Binding("Text",
> dataSetAgentes, "Agentes.Columna") );
>
> Suerte...
>
> >Hola de nuevo.
> >
> > Primero, gracias por la ayuda. Respecto al punto dos
> mes explicaré
> >mejor. Tengo un formulario formado por un datagrid en la
> parte superior y
> >los textbox respectivos a cada columna en la parte
> inferior. Tanto el
> >datagrid como los textbox, estan vinculados
> (databinding) a una tabla de un
> >dataset de manera que cuando cargo el dataset, veo todos
> los registros en el
> >datagrid y el registro seleccionado en los textbox (para
> hacer altas,
> >modificaciones, ...). Pues bien, si no ordeno las
> columnas del datagrid, la
> >propiedad Position del dataset i el indice de la fila
> activa del datagrid
> >coinciden por lo que en los textbox me muestra los datos
> correctos. Pero si
> >el usuario ordena cualquier columna del datagrid, los
> indices no coinciden y
> >los datos que cargo en los textbox no son los de la fila
> seleccionada en el
> >datagrid. La instrucción que actualizo actualmente és ...
> >
> > this.BindingContext
> [dataSetAgentes, "Agentes"].Position > > >dataGridAgentes.CurrentRowIndex;
> >
> >La pregunta es ¿Cómo puedo sincronizar el datagrid con
> los textbox?
> >
> >Gracias de nuevo.
> >
> >Joan Carles Jiménez
> >
> >
> >
> >"pablo crosio" escribió en
> el mensaje
> >news:5abc01c48150$f22bf3b0$
> >
> >hola!
> >
> >te paso un ejemplo para 1):
> >
> >using System;
> >using System.Threading;
> >using System.Data;
> >using System.Data.OleDb;
> >
> >public class HebraDeTrabajo
> >{
> > public static void HacerTrabajo()
> > {
> > DataSet ds = new DataSet();
> > OleDbDataAdapter da = new OleDbDataAdapter("SELECT
> *
> >FROM xxx", new OleDbConnection("Provider=...;Data
> >Source=...;..."));
> > da.Fill(ds);
> > Console.WriteLine("ds.Tables[0].Rows.Count: {0}",
> >ds.Tables[0].Rows.Count);
> > }
> >}
> >class HebraPrincipal
> >{
> > public static void Main()
> > {
> > ThreadStart miDelegado = new ThreadStart
> >(HebraDeTrabajo.HacerTrabajo);
> > Thread miHebra = new Thread(miDelegado);
> > miHebra.Start();
> > for(int i = 0; i<10; i++)
> > {
> > Console.WriteLine("Hebra principal activa.");
> > Thread.Sleep(1000);
> > }
> > }
> >}
> >
> >fijate que el mensaje sale sin bloquerse mientras se
> carga
> >el DataSet
> >
> >con respecto a 2) realmente no entiendo el problema
> >hoy es viernes!
> >
> >salu2!!
> >
> >pablo
> >
> >
> >
> >>Hola a
> >>
> >> Tengo un par de problemas que no encuentro solución.
> >>
> >>1) Tengo un dataset que me gustaria cargar en otro hilo
> >para no bloquear la
> >>aplicació/ordenador en caso de que el numero de
> registros
> >sea elevado. He
> >>mirado como lo hace los ejemplos del .NET pero parece
> ser
> >que no funcionan
> >>del todo bien. Cuando hago el fill del dataset, se queda
> >clavado hasta que
> >>ha acabado de cargar los registros. ¿Alguna idea (o
> >esquema) de como montar
> >>el sistema?
> >>
> >>2) Una vez cargado el dataset, lo muestro en un
> datagrid.
> >En la carga
> >>inicial, el indice del dataset y del datagrid coinciden
> y
> >cuando hago click
> >>sobre una fila del datagrid, muestro la información en
> la
> >ficha del registro
> >>haciendo coincidir los índices. El problema està cuando
> >ordeno alguna
> >>columna del datagrid. Los indices ya no coinciden. ¿Cómo
> >puedo saber la
> >>posición del dataset a la cual pertenece un registro del
> >datagrid?
> >>
> >> Espero haberme explicado bien. Sinó, aquí estoi para
> >aclarecer cualquier
> >>duda. Gracias por adelantado.
> >>
> >>Joan Carles Jiménez
> >>
> >>
> >>
> >>
> >>.
> >>
> >
> >
> >.
> >
>
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida