Hola Diego,
Seguro, pero ese no era mi punto. Partiendo del hecho que el código
tiene problemas entonces es necesario encontrar la causa. En mi mi
primer mensaje cuando mencioné que "algo huele mal en el código", lo
dije porque si se crea una DataSet para luego sobreescribirlo sin
haberlo utilizado, entonces es necesario evaluar si realmente se está
operando con la instancia correcta. Como el origen del DataSet es una
clase helper compartida por las dos clases involucradas en el problema
entonces no me sorprendería que el helper estuviera devolviendo siempre
la misma instancia. Saludos,
Fernando Tubio
----- Original Message -----
*From:* Diego Jancic <mailto:[EMAIL PROTECTED]>
*To:* puntonet@mug.org.ar <mailto:puntonet@mug.org.ar>
*Sent:* Tuesday, April 03, 2007 10:46 AM
*Subject:* [puntonet] Re: Re: [puntonet] Re: [puntonet] Re:
[puntonet] Comportamiento extraño de DataSet o ComboBox
Hola Fernando!,
Ahi puede haber una perdida en performance, pero el bug no esta
ahi... si se sobreescribe una referencia de un objeto que no se
uso nunca no pasa nada!
Salu2!
On 4/3/07, *Fernando Tubio* <[EMAIL PROTECTED]
<mailto:[EMAIL PROTECTED]>> wrote:
Este código tiene el mismo problema que el que enviaste
anteriormente.
public DataSet LlenaComboBox()
{
DataSet dsSalida = new DataSet(); <== SE CREA UN
DATASET
this.datos.db.cargaSentencia("SELECT ID,NOMBRE from
VENDEDORES WHERE ESTADO<>1 ORDER BY NOMBRE");
this.datos.db.ejecutar();
dsSalida = this.datos.db.RetornaDataSet(); <== PERO
SE DEVUELVE
UNA INSTANCIA
DIFERENTE!!!!
return dsSalida;
}
Saludos,
Fernando Tubio
----- Original Message -----
From: "Gustavo" <[EMAIL PROTECTED]
<mailto:[EMAIL PROTECTED]>>
To: < puntonet@mug.org.ar <mailto:puntonet@mug.org.ar>>
Sent: Tuesday, April 03, 2007 10:17 AM
Subject: [puntonet] Re: [puntonet] Re: [puntonet]
Comportamiento extraño de
DataSet o ComboBox
> La verdad que ya lo cmabie de forma bastantes veces, pero en
este momento,
> esta de manera que el dataset que se retorna es local al
metodo, asi:
>
> public DataSet LlenaComboBox()
> {
> DataSet dsSalida = new DataSet();
> this.datos.db.cargaSentencia ("SELECT ID,NOMBRE
from VENDEDORES
> WHERE ESTADO<>1 ORDER BY NOMBRE");
> this.datos.db.ejecutar();
> dsSalida = this.datos.db.RetornaDataSet();
> return dsSalida;
> }
>
> Tambien por este mimso tema, modifique
this.datos.db.RetornaDataSet();
> hize un metodo que retorna el dataset de la misma manera,
antes era un
> dataset publico y y lo asignaba directamente, pero para
aislarlo mas,
> llegue a eso.
>
> Fernando Tubio escribió:
>> ¿Como obtienen sus respectivos DataSets las clases
Vendedores y
>> Movimientos?
>> Lo hacen sobre una variable local y creando una nueva
instancia por cada
>> llamado a Llenar( ). Por ejemplo,
>>
>> public DataSet Llenar( )
>> {
>> ...
>> DataSet ds = new DataSet();
>> ...
>> // sigue código para llenar el DataSet
>> }
>>
>> O quizás lo hacen a través de otro método que devuelve el
DataSet(). Por
>> ejemplo,
>>
>> public DataSet Llenar( )
>> {
>> ...
>> DataSet ds = Helper.GetDataSet();
>> ...
>> // sigue código para llenar el DataSet
>> }
>>
>> En este segundo caso entonces dependerá de como fue
implementado el
>> método
>> GetDataSet( ), pero ambas clases podrían compartir una
misma instancia
>> del
>> DataSet, si por ejemplo la implementación fuera la
siguiente.
>>
>> static class Helper
>> {
>> public static DataSet _ds = new DataSet();
>>
>> public static GetDataSet( )
>> {
>> return _ds;
>> }
>> }
>>
>> Estos son solo ejemplos. Probablemente esto no tenga nada
que ver con tu
>> código pero a esto me refiero con que podrían estar
compartiendo la misma
>> instancia de DataSet.
>>
>> Saludos,
>>
>> Fernando Tubio
>>
>> ----- Original Message ----- From: "Gustavo" <
[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>>
>> To: <puntonet@mug.org.ar <mailto:puntonet@mug.org.ar>>
>> Sent: Tuesday, April 03, 2007 9:24 AM
>> Subject: [puntonet] Re: [puntonet] Re: [puntonet]
Comportamiento extraño
>> de
>> DataSet o ComboBox
>>
>>
>>> Que tal Fernando, la idea era usar el dataset que devuelve
llenar para
>>> cargar el combo.
>>> No creo que tengan relacion, pero como seria que la clase
vendedores y
>>> movimientos compartan una misma instancia de DataSet?
>>> Muchas Gracias
>>>
>>> Fernando Tubio escribió:
>>>> Algo huele mal en el código que enviaste. Primero se crea
un DataSet,
>>>>
>>>>> this.dsVendedores = new DataSet();
>>>>
>>>> e inmediatamente se lo sobreescribe con un llamado al
método Llenar()
>>>>
>>>>> this.dsVendedores = this.vendedores.Llenar();
>>>>
>>>> Idem para la otra clase.
>>>>
>>>>> this.dsMovimientos = new DataSet();
>>>>> this.dsMovimientos =
>>>>>
this.movimientos.Llenar(Convert.ToInt32(this.vendedor.SelectedValue));
>>>>
>>>> El resultado es que el DataSet usado como data source del
ComboBox es
>>>> el
>>>> devuelto por la clase Vendedores, y si bien esto en sí no
tiene nada de
>>>> malo, sospecho que no es lo que te proponías. Si tu
intención es que el
>>>> método Llenar() cargue el DataSet creado previamente
entonces deberías
>>>> modificar dicho método para tomar el DataSet como
parámetro. Esto
>>>> también
>>>> sería más consistente, por lo menos en lo que respecta a
nombres de
>>>> método,
>>>> con el patrón usado en los TableAdapters de NET 2.0,
donde se pueden
>>>> generar
>>>> métodos que devuelven un objeto nuevo cuyo nombre por
default comienza
>>>> con
>>>> Get...(), como también métodos que operan sobre un objeto
recibido como
>>>> parámetro y que por default comienzan con Fill...(), o en
tu caso
>>>> Llenar().
>>>>
>>>> Habría que ver el código de las clases Vendedores y
Movimientos para
>>>> decir
>>>> donde está el problema, pero sospecho que deben compartir
una misma
>>>> instancia de DataSet.
>>>>
>>>> Saludos,
>>>>
>>>> Fernando Tubio
>>>>
>>>> ----- Original Message ----- From: "Gustavo" <
[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>>
>>>> To: <puntonet@mug.org.ar <mailto:puntonet@mug.org.ar>>
>>>> Sent: Friday, March 30, 2007 7:21 PM
>>>> Subject: [puntonet] Comportamiento extraño de DataSet o
ComboBox
>>>>
>>>>
>>>>> Buenas Tardes, a ver si me pueden ayudar, si a alguien
le sucedio algo
>>>>> parecido, me sucede algo extraño:
>>>>> Cree una serie de clases para la manipulacion de datos
de las tablas
>>>>> de
>>>>> la
>>>>> aplicacion.
>>>>> Una de ellas la uso para traer de la base de datos los
vendedores en
>>>>> un
>>>>> dataset que uso de transporte y luego llenar un ComboBox
de la
>>>>> siguiente
>>>>> manera:
>>>>>
>>>>> this.vendedores = new Vendedores();
>>>>> this.dsVendedores = new DataSet();
>>>>> this.dsVendedores = this.vendedores.Llenar();
>>>>> this.vendedor.DisplayMember = "NOMBRE";
>>>>> this.vendedor.ValueMember = "ID";
>>>>> this.vendedor.DataSource =
this.dsVendedores.Tables[0].DefaultView;
>>>>>
>>>>> Hasta aca todo bien, se llena el combo correctamente
teniendo el campo
>>>>> ID
>>>>> como value y el Nombre en Display.
>>>>> Pero Cuando Creo otro objeto de otra clase similar pero
para otra
>>>>> entidad,
>>>>> al llamar al metodo this.movimientos.Llenar me rompe el
combobox de
>>>>> vendedores, mantiene su cantidad de registros, pero dice
>>>>> System.DataRow,
>>>>> como si se perdieran sus datos.....
>>>>>
>>>>> this.movimientos = new Movimientos(); this.dsMovimientos
=
>>>>> new
>>>>> DataSet();
>>>>> this.dsMovimientos =
>>>>>
this.movimientos.Llenar(Convert.ToInt32(this.vendedor.SelectedValue));
>>>>> <<<< Rompe
>>>>>
>>>>> No entiendo que es lo que sucede ya que son dos objetos
diferentes.
>>>>> los
>>>>> datasets no tienen relacion alguna y no son
referenciados.
>>>>> A su vez, la clase Movimientos y Vendedores usan otra
clase, que se
>>>>> usa
>>>>> de
>>>>> coneccion a la base de datos, quizas venga por ahi, pero
no encuentro
>>>>> nada.
>>>>> Espero que se entienda el problema, Me podran dar alguna
ayuda?
>>>>>
>>>>> Saludos
>>>>> Gustavo
>>>>>
>>>>
>>>>
>>>
>>>
>>
>>
>
>