Ver Mensaje Individual
  #3 (permalink)  
Antiguo 27/02/2007, 16:21
Avatar de zacktagnan
zacktagnan
 
Fecha de Ingreso: abril-2005
Mensajes: 501
Antigüedad: 19 años, 11 meses
Puntos: 3
Re: Seleccionar un elemento de un control según campo de la base de datos

Buenas:

De primeras, por si acaso, decir que estoy programando en C#.

A ver .seb...
Cita:
Si pelicula.Genero == "accion"
comboGenero.SelectedText = "accion"
A mi esa propiedad ó método (todavía no me aclaro cuando es una cosa u otra) para el ListBox ó el DropDownList no me sale...

Cita:
Calculo que estarás buscando algo mas rebuscado o no logro entender tu pregunta.
Intentaré explicar de nuevo la situación planteada que ya casi he solucionado.

En la base de datos, tengo entre otras tablas las que siguen:
PELICULAS, GENEROS, DETALLES_GENERO, DISTRIBUIDORES

PELICULAS esta relacionada con DISTRIBUIDORES por el código del distribuidor
La película podrá tener uno ó varios géneros, por eso está la tabla de DETALLES_GENERO en la que se ingresa un registro relacionado con el código de película por cada género elegido en el insert de la misma.
DETALLES_GENERO está relacionada también, por supuesto, con GENEROS por el código de ésta última.

[DISTRIBUIDORES]<---[PELICULAS]--->[DETALLES_GENERO]--->[GENERO]

Más ó menos, esa es la estructura.

En la ficha de película en la web, en el formulario, existen diversas cajas para meter datos como el título, actores,...
Y luego hay:

- un RadiobuttonList con dos opciones Color (con valor interno de 1) y B/N (con valor interno de 0)
- un DropDownList de Clasificación (Todos los públicos, Mayores de 18, ...)
- un DropDownList de Distribuidores (que se carga a través de una consulta sobre tabla DISTRIBUIDORES >> DataValueField="distr_id" DataTextField="distr_empresa")
- un ListBox de Géneros (que se carga a través de una consulta sobre la tabla GENEROS >> DataValueField="gen_id" DataTextField="gen_nom"). Es un ListBox con selección múltiple para como he explicado puede elegirse más de uno si es el caso.

Pues eso, a la página de la ficha le llega el ID de la película (peli_id) que servirá para sacar los datos de la película a través de la consulta correspondiente.
Hago otra SQL para obtener la lista de distribuidores y otra para obtener los géneros.

La lista referente a la Clasificación no viene de ninguna consulta sino que la cosntruyo a pelo, manualmente, en el PageLoad

La cosa es que si la película demandada es la que tiene el código, por ejemplo, 'p0000034' con el código de distribuidor 4, en la lista correspondiente quede seleccionado el nombre de ese distribuidor al cargarse la página.

Lo mismo para los otros casos:
- en el campo de ColorBN de la tabla PELICULAS se inserta 1 si es a Color y 0 si es a B/N, entonces al cargar la lista deberá quedar chequeada la opción específica según el caso.
- para la lista de géneros, igual, deberán quedar seleccionados los elementos que se refieran a los géneros de la película mostrada, que vendrás dados por los detalles de género.
- el campo de clasificación en la tabla es de tipo nvarchar y guarda el nivel según que peli sea (Todos los públicos, Mayores de ...). Entonces si por ejemplo la peli es para "Todos los públicos" en la lista deberá que dar seleccionado este elemento con el mismo texto.

Decir que uso un DataReader para sacar los datos

He llegado a solucionar todos los casos menos el de la clasificación.

Para lo del RadioButtonList (peli_colbn) de Color - B/N:
Código:
bool vpeli_colbn = bool.Parse((dr_laPeliMod["peli_colbn"]).ToString());
if (vpeli_colbn == true)//SI COLOR
{
	peli_colbn.Items[0].Selected = true;//OPCIÓN COLOR
}
else
{
	peli_colbn.Items[1].Selected = true;//OPCIÓN B/N
}

Para lo del DropDownList (peli_distrib) de Distribuidores:
Código:
string vpeli_distrib = (dr_laPeliMod["peli_distrib"]).ToString();
for (int i_dis=0; i_dis<peli_distrib.Items.Count; i_dis++) 
{
	if (peli_distrib.Items[i_dis].Value == vpeli_distrib) 
	{
		peli_distrib.Items[i_dis].Selected = true;
	}
}

Para lo del ListBox (peli_distrib) de Géneros:
Código:
bool existe_laPeliMod;
while(existe_laPeliMod)
{
	vgen_nom = (dr_laPeliMod["gen_nom"]).ToString();
	for (int i_gen=0; i_gen<list_generos.Items.Count; i_gen++) 
	{
		if (list_generos.Items[i_gen].Text == vgen_nom) 
		{
			list_generos.Items[i_gen].Selected = true;
		}
	}
	existe_laPeliMod = dr_laPeliMod.Read();
}

Y me falta que quede seleccionado el elemento del DropDownList de Claificación.

Como he dicho, éste no se rellena a través de ninguna consulta a una tabla sino que lo construyo yo en el PageLoad de esta manera:
Código:
//CARGA DEL MENÚ DE [ Calificación ]
peli_calif.Items.Insert(0, "----------* Seleccionar una *----------");
peli_calif.Items.Insert(1, "Todos los públicos");
peli_calif.Items.Insert(2, "Recomendada para menores de 3");
peli_calif.Items.Insert(3, "Recomendada para mayores de 7");
peli_calif.Items.Insert(4, "Recomendada para mayores de 12");
peli_calif.Items.Insert(5, "Recomendada para mayores de 16");
peli_calif.Items.Insert(6, "Recomendada para mayores de 18");

He intentado a usar lo mismo empleado para que quede elegido el distribuidor.

Siendo [peli_calif] el nombre del control:

Código:
string vpeli_calif = (dr_laPeliMod["peli_calif"]).ToString();
for (int i_calif=0; i_calif<peli_calif.Items.Count; i_calif++) 
{
	if (peli_calif.Items[i_calif].Text == vpeli_calif) 
	{
		peli_calif.Items[i_calif].Selected = true;
	}
}
Pero, aunque no da error tampoco, selecciona lo deseado.

Pues eso, si alguien sabe como solucionar este último caso que es el que me queda, espero su respuesta muy agradecido.

Espero haberte aclarado algo más .sb (a no ser que te hayas enrollado más aún).
__________________
Saludos,

zacktagnan.
=================================================