Actualizar un datagrid y puerto serie

17/03/2006 - 17:42 por ana | Informe spam
Hola,
Tengo una ventana con un datagrid y dos campos de texto. En uno se indica
el valor del datagrid que en ese momento se tiene que leer con una pistola
LCB y en el otro se escribe el valor que se lee de la pistola. Cuando lo
leido es correcto actualizo el datagrid y paso al siguiente valor a ser
comprobado. Cuando se ha terminado de comprobar todas las filas del data
grid llamo a una función para refrescar los datos, que es la misma a la que
se llama en el Load de la ventana. En esta función creo un dataset, realizo
la consulta SQL y asocio el datagrid con el dataset.

En el Load no da problemas, pero cuando voy a recargar otra vez los datos
después de leerlos todos, al hacer el SetDataBinding del datagrid con el
dataset me da un error de:

- System.ArgumentException - Controls created on a thread cannot be parented
to another thread

Los datos de la pistola se leen a través del puerto serie. En la clase para
manejar el puerto serie declaro el evento:

public event EtiquetaRecibidaDelegate EtiquetaRecibida;
public delegate void EtiquetaRecibidaDelegate(string label);

Y luego en la función donde se abre el puerto serie:

EtiquetaRecibida += new
ComPistolaLCB.EtiquetaRecibidaDelegate(Form).LoadLabel);

La función LoadLabel está definida en Form (la ventana con el datagrid).

La función que refresca los datos tiene el siguiente código:

DataSet dataset = new DataSet(DATASET_PRESEQUENCING_NAME);
if (!presequencingUIProcess.PresequencingCurrentGetList(lineTC, compFamily,
ref dataset, DATASET_PRESEQUENCING_NAME))
return;

dataset.DataSetName = DATASET_PRESEQUENCING_NAME;
dGCurrentPresequencing.SetDataBinding(dataset, DATASET_PRESEQUENCING_NAME);
dGCurrentPresequencing.Refresh();

- En el SetDataBinding es donde me da el error.

He probado declarando el dataset como una variable global de la clase y
haciendo un reset al principio de la función: dataset.Reset();

Entonces no me da ese error pero el datagrid me aparece vacío. Sin embargo,
depurando, si consulto: datagrid.DataSet.Tables
veo que si están los datos que se deberían de mostrar.

Espero que me haya explicado bien.
No sé si a alguien le ha pasado esto alguna vez y/o si conoce la solución.
Pero agradecería muchísimo si alguien me dice como lo podría solucionar.

Muchas gracias,
Ana
 

Leer las respuestas

#1 Vyacheslav Popov
21/03/2006 - 21:48 | Informe spam
Hola Ana, no estoy seguro de podré ayudarte, pero he visto varios errores.
Te los mostrare en el código.

if (!presequencingUIProcess.PresequencingCurrentGetList(lineTC,
compFamily,
ref dataset, DATASET_PRESEQUENCING_NAME))
return;


¿Que hace este código?



dataset.DataSetName = DATASET_PRESEQUENCING_NAME;


Esta declaración te sobra, ya que le diste el nombre en el constructor.


dGCurrentPresequencing.SetDataBinding(dataset,
DATASET_PRESEQUENCING_NAME);
dGCurrentPresequencing.Refresh();


El método SetDataBinding debe recibir el dataSet y el nombre de la TABLA. En
tu caso si tiene solo una tabla lo tienes que dejar en blanco, pon comillas
vacías ("")

Preguntas similares