ComboBox - Principal / Secundario

17/07/2006 - 07:15 por Cristian | Informe spam
Estimados,

En un formulario windows hecho en VB.Net 2003 tengo 2 comboboxs; principal y
secundario.
Principal contiene (por ejemplo) los continentes, y el secundario los países
del continente seleccionado en el combobox principal.
La carga de "continentes" en el combobox principal lo tengo implementado en
el evento "load" del formulario de la siguiente manera.

cboPrin.DataSource = ds.Tables(0)
cboPrin.DisplayMember = ds.Tables(0).Columns(0).ColumnName
cboPrin.ValueMember = ds.Tables(0).Columns(0).ColumnName

Ademas tengo el evento "SelectedIndexChanged" para cargar los datos de
"Países" en el combobox secundario (de la misma forma que cargo el combobox
principal). Todo lo anterior con procedimientos almacenados (SQL 2000).

El problema es que en el evento load, al cargar el combobox principal, por
cada elemento que se "agrega" al combo, se ejecuta el evento
"SelectedIndexChanged" y se llena el combo secundario, o sea, para el
ejemplo, va 7 veces (por cada continente) a cargar los paises en el combo
secundario (se conecta 7 veces a la bd) y luego de eso se muestra el
formulario al usuario.

Quiero evitar que en la carga inicial (Load) se ejecute el evento
"SelectedIndexChanged". En otras palabras, quiero cargar sólo el combo
principal en la carga del formulario (que no se ejecute el
"SelectedIndexChanged" en el load dle frm), y que cuando el usuario escoja un
continente, sólo en ese momento se cargue el combo secundario de países.

Quedo atento a sus sugerencias.

Atte.
Cristian.

Preguntas similare

Leer las respuestas

#1 frank
17/07/2006 - 09:35 | Informe spam
hola,

prueba de meter el llenado del combo en el load, dentro de cbo.BeginUpdate()
y cbo.EndUpdate();

saludos

"Cristian" escribió en el mensaje
news:
Estimados,

En un formulario windows hecho en VB.Net 2003 tengo 2 comboboxs; principal


y
secundario.
Principal contiene (por ejemplo) los continentes, y el secundario los


países
del continente seleccionado en el combobox principal.
La carga de "continentes" en el combobox principal lo tengo implementado


en
el evento "load" del formulario de la siguiente manera.

cboPrin.DataSource = ds.Tables(0)
cboPrin.DisplayMember = ds.Tables(0).Columns(0).ColumnName
cboPrin.ValueMember = ds.Tables(0).Columns(0).ColumnName

Ademas tengo el evento "SelectedIndexChanged" para cargar los datos de
"Países" en el combobox secundario (de la misma forma que cargo el


combobox
principal). Todo lo anterior con procedimientos almacenados (SQL 2000).

El problema es que en el evento load, al cargar el combobox principal, por
cada elemento que se "agrega" al combo, se ejecuta el evento
"SelectedIndexChanged" y se llena el combo secundario, o sea, para el
ejemplo, va 7 veces (por cada continente) a cargar los paises en el combo
secundario (se conecta 7 veces a la bd) y luego de eso se muestra el
formulario al usuario.

Quiero evitar que en la carga inicial (Load) se ejecute el evento
"SelectedIndexChanged". En otras palabras, quiero cargar sólo el combo
principal en la carga del formulario (que no se ejecute el
"SelectedIndexChanged" en el load dle frm), y que cuando el usuario escoja


un
continente, sólo en ese momento se cargue el combo secundario de países.

Quedo atento a sus sugerencias.

Atte.
Cristian.
Respuesta Responder a este mensaje
#2 Cristian
17/07/2006 - 21:37 | Informe spam
Frank:

Hice lo sugerido, pero no funciona, para verificarlo tengo un messagebox
desplegando el SelectedIndex del combo en el evento SelectedIndexChanged y me
muestra el mensaje tantas veces como registros se agregan al combo. :-(

¿será que el evento SelectedIndexChanged no es el apropiado?

Desde ya muchas gracias.

Saludos.
Cristian.

"frank" escribió:

hola,

prueba de meter el llenado del combo en el load, dentro de cbo.BeginUpdate()
y cbo.EndUpdate();

saludos

"Cristian" escribió en el mensaje
news:
> Estimados,
>
> En un formulario windows hecho en VB.Net 2003 tengo 2 comboboxs; principal
y
> secundario.
> Principal contiene (por ejemplo) los continentes, y el secundario los
países
> del continente seleccionado en el combobox principal.
> La carga de "continentes" en el combobox principal lo tengo implementado
en
> el evento "load" del formulario de la siguiente manera.
>
> cboPrin.DataSource = ds.Tables(0)
> cboPrin.DisplayMember = ds.Tables(0).Columns(0).ColumnName
> cboPrin.ValueMember = ds.Tables(0).Columns(0).ColumnName
>
> Ademas tengo el evento "SelectedIndexChanged" para cargar los datos de
> "Países" en el combobox secundario (de la misma forma que cargo el
combobox
> principal). Todo lo anterior con procedimientos almacenados (SQL 2000).
>
> El problema es que en el evento load, al cargar el combobox principal, por
> cada elemento que se "agrega" al combo, se ejecuta el evento
> "SelectedIndexChanged" y se llena el combo secundario, o sea, para el
> ejemplo, va 7 veces (por cada continente) a cargar los paises en el combo
> secundario (se conecta 7 veces a la bd) y luego de eso se muestra el
> formulario al usuario.
>
> Quiero evitar que en la carga inicial (Load) se ejecute el evento
> "SelectedIndexChanged". En otras palabras, quiero cargar sólo el combo
> principal en la carga del formulario (que no se ejecute el
> "SelectedIndexChanged" en el load dle frm), y que cuando el usuario escoja
un
> continente, sólo en ese momento se cargue el combo secundario de países.
>
> Quedo atento a sus sugerencias.
>
> Atte.
> Cristian.



Respuesta Responder a este mensaje
#3 David Sans
18/07/2006 - 09:49 | Informe spam
Yo lo soluciono con una variable boolean que en el momento de llenar el primer combo. la pongo a true.
y en el SelectedIndexChanged del primer combo, compruebo si esta a true, si esta a true no busco los países.

Mas o menos así:

dim SeEstaLlenandoElCombo as boolean = false ' Flag de cargado combobox1.

en el load :

SeEstaLlenandoElCombo as boolean = True
cboPrin.DataSource = ds.Tables(0)
cboPrin.DisplayMember = ds.Tables(0).Columns(0).ColumnName
cboPrin.ValueMember = ds.Tables(0).Columns(0).ColumnName

SeEstaLlenandoElCombo as boolean = False


En el SelectedIndexChanged del combo 1:

if SeEstaLlenandoElCombo as boolean = False then
' cargado del segundo combobox.
end if


Un saludo
David Sans

"Cristian" escribió en el mensaje news:
Estimados,

En un formulario windows hecho en VB.Net 2003 tengo 2 comboboxs; principal y
secundario.
Principal contiene (por ejemplo) los continentes, y el secundario los países
del continente seleccionado en el combobox principal.
La carga de "continentes" en el combobox principal lo tengo implementado en
el evento "load" del formulario de la siguiente manera.

cboPrin.DataSource = ds.Tables(0)
cboPrin.DisplayMember = ds.Tables(0).Columns(0).ColumnName
cboPrin.ValueMember = ds.Tables(0).Columns(0).ColumnName

Ademas tengo el evento "SelectedIndexChanged" para cargar los datos de
"Países" en el combobox secundario (de la misma forma que cargo el combobox
principal). Todo lo anterior con procedimientos almacenados (SQL 2000).

El problema es que en el evento load, al cargar el combobox principal, por
cada elemento que se "agrega" al combo, se ejecuta el evento
"SelectedIndexChanged" y se llena el combo secundario, o sea, para el
ejemplo, va 7 veces (por cada continente) a cargar los paises en el combo
secundario (se conecta 7 veces a la bd) y luego de eso se muestra el
formulario al usuario.

Quiero evitar que en la carga inicial (Load) se ejecute el evento
"SelectedIndexChanged". En otras palabras, quiero cargar sólo el combo
principal en la carga del formulario (que no se ejecute el
"SelectedIndexChanged" en el load dle frm), y que cuando el usuario escoja un
continente, sólo en ese momento se cargue el combo secundario de países.

Quedo atento a sus sugerencias.

Atte.
Cristian.
Respuesta Responder a este mensaje
#4 frank
18/07/2006 - 10:11 | Informe spam
hola,

Tienes razón. BeginUpdate() y EndUpdate() solo afectan al repintado del
control.
puedes usar el evento SelectedChangeCommited() que sólo se dispara cuando el
usuario cambia el índice seleccionado.

Saludos

"Cristian" escribió en el mensaje
news:
Frank:

Hice lo sugerido, pero no funciona, para verificarlo tengo un messagebox
desplegando el SelectedIndex del combo en el evento SelectedIndexChanged y


me
muestra el mensaje tantas veces como registros se agregan al combo. :-(

¿será que el evento SelectedIndexChanged no es el apropiado?

Desde ya muchas gracias.

Saludos.
Cristian.

"frank" escribió:

> hola,
>
> prueba de meter el llenado del combo en el load, dentro de


cbo.BeginUpdate()
> y cbo.EndUpdate();
>
> saludos
>
> "Cristian" escribió en el mensaje
> news:
> > Estimados,
> >
> > En un formulario windows hecho en VB.Net 2003 tengo 2 comboboxs;


principal
> y
> > secundario.
> > Principal contiene (por ejemplo) los continentes, y el secundario los
> países
> > del continente seleccionado en el combobox principal.
> > La carga de "continentes" en el combobox principal lo tengo


implementado
> en
> > el evento "load" del formulario de la siguiente manera.
> >
> > cboPrin.DataSource = ds.Tables(0)
> > cboPrin.DisplayMember = ds.Tables(0).Columns(0).ColumnName
> > cboPrin.ValueMember = ds.Tables(0).Columns(0).ColumnName
> >
> > Ademas tengo el evento "SelectedIndexChanged" para cargar los datos de
> > "Países" en el combobox secundario (de la misma forma que cargo el
> combobox
> > principal). Todo lo anterior con procedimientos almacenados (SQL


2000).
> >
> > El problema es que en el evento load, al cargar el combobox principal,


por
> > cada elemento que se "agrega" al combo, se ejecuta el evento
> > "SelectedIndexChanged" y se llena el combo secundario, o sea, para el
> > ejemplo, va 7 veces (por cada continente) a cargar los paises en el


combo
> > secundario (se conecta 7 veces a la bd) y luego de eso se muestra el
> > formulario al usuario.
> >
> > Quiero evitar que en la carga inicial (Load) se ejecute el evento
> > "SelectedIndexChanged". En otras palabras, quiero cargar sólo el combo
> > principal en la carga del formulario (que no se ejecute el
> > "SelectedIndexChanged" en el load dle frm), y que cuando el usuario


escoja
> un
> > continente, sólo en ese momento se cargue el combo secundario de


países.
> >
> > Quedo atento a sus sugerencias.
> >
> > Atte.
> > Cristian.
>
>
>
Respuesta Responder a este mensaje
#5 Cristian
18/07/2006 - 17:47 | Informe spam
Frank.

funcionó perfecto, justamente lo que buscaba y necesitaba.
Muchas gracias !.

Saludos.
Cristian.

"frank" escribió:

hola,

Tienes razón. BeginUpdate() y EndUpdate() solo afectan al repintado del
control.
puedes usar el evento SelectedChangeCommited() que sólo se dispara cuando el
usuario cambia el índice seleccionado.

Saludos

"Cristian" escribió en el mensaje
news:
> Frank:
>
> Hice lo sugerido, pero no funciona, para verificarlo tengo un messagebox
> desplegando el SelectedIndex del combo en el evento SelectedIndexChanged y
me
> muestra el mensaje tantas veces como registros se agregan al combo. :-(
>
> ¿será que el evento SelectedIndexChanged no es el apropiado?
>
> Desde ya muchas gracias.
>
> Saludos.
> Cristian.
>
> "frank" escribió:
>
> > hola,
> >
> > prueba de meter el llenado del combo en el load, dentro de
cbo.BeginUpdate()
> > y cbo.EndUpdate();
> >
> > saludos
> >
> > "Cristian" escribió en el mensaje
> > news:
> > > Estimados,
> > >
> > > En un formulario windows hecho en VB.Net 2003 tengo 2 comboboxs;
principal
> > y
> > > secundario.
> > > Principal contiene (por ejemplo) los continentes, y el secundario los
> > países
> > > del continente seleccionado en el combobox principal.
> > > La carga de "continentes" en el combobox principal lo tengo
implementado
> > en
> > > el evento "load" del formulario de la siguiente manera.
> > >
> > > cboPrin.DataSource = ds.Tables(0)
> > > cboPrin.DisplayMember = ds.Tables(0).Columns(0).ColumnName
> > > cboPrin.ValueMember = ds.Tables(0).Columns(0).ColumnName
> > >
> > > Ademas tengo el evento "SelectedIndexChanged" para cargar los datos de
> > > "Países" en el combobox secundario (de la misma forma que cargo el
> > combobox
> > > principal). Todo lo anterior con procedimientos almacenados (SQL
2000).
> > >
> > > El problema es que en el evento load, al cargar el combobox principal,
por
> > > cada elemento que se "agrega" al combo, se ejecuta el evento
> > > "SelectedIndexChanged" y se llena el combo secundario, o sea, para el
> > > ejemplo, va 7 veces (por cada continente) a cargar los paises en el
combo
> > > secundario (se conecta 7 veces a la bd) y luego de eso se muestra el
> > > formulario al usuario.
> > >
> > > Quiero evitar que en la carga inicial (Load) se ejecute el evento
> > > "SelectedIndexChanged". En otras palabras, quiero cargar sólo el combo
> > > principal en la carga del formulario (que no se ejecute el
> > > "SelectedIndexChanged" en el load dle frm), y que cuando el usuario
escoja
> > un
> > > continente, sólo en ese momento se cargue el combo secundario de
países.
> > >
> > > Quedo atento a sus sugerencias.
> > >
> > > Atte.
> > > Cristian.
> >
> >
> >



Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida