Salve a tutti,
http:
ho un problemino che però non riesco a risolvere.

Stò imparando da poco il .NET e creando un sito web per studio in una delle pagine ho inserito 3 DropDownList visualizzabili dinamicamente uno dipendente dal l'altro per la ricerca di uno specifico prodotto in magazzino.

- ho inserito una combobox per il tipo(hw e sw) che selezionando un valore (1 o 2) visualizza la seconda combo delle categorie (Monitor, tastiera, processore etc.) da dove selezionando un elemento fa la seconda query (per tipo e cat su tabella prodotti).

- A questo punto se la query eè true visualizzerà la terza combo con i prodotti corrispondenti ai criteri scelti. Selezionando poi uno di questi prodotti intendo visualizzare una tabella con tutti i dettagli del l'elemento ed effettuare l'ordine.

_______________________________

Il mio problema è che questi controlli (DropDownList) li ho inseriti in un controllo utente che viene richiamato dalla relativa pagina .aspx (collegata ad una MasterPage).

Ed è proprio questa MasterPage che secondo me non mi permette di far eseguire il codice inserito all'interno dell'evento"OnSelectedIndexChanged" dove vengono richiamate la classe e i relativi metodi.

Ho provato ad aggiungere una nuova pagina al progetto senza utilizzare il Controllo utente e cosi l'evento funziona.

Questo è il codice asp di uno dei controlli:

<asp:DropDownList
ID="cmb_tipo"
runat="server"
ToolTip="Selezionare la tipologia del prodotto dall'elenco."
visible="true"
OnSelectedIndexChanged="cmb_tipo_SelectedIndexChanged"
AutoPostBack="true">
</asp:DropDownList><br />

Grazie
Danilo ( http://www.dankarsoft.com )

DANKARSOFT
se non erro hai già posto la domanda, ho visto il preocedente post, e il codice che hai allegato, onestamente troppo longo per controllarlo tutto.

ti riformulo la domanda fatto nel precedente post, l'event handler del SelectedIndexChanged è definito nella MasterPage o nel code behind dell'UserControl?

ciao marco

Chi parla senza modestia troverà difficile rendere buone le proprie parole.
Confucio

http://nostromo.spaces.live.com/default.aspx
Ciao,

scusami x prima ho anche sbaglaito ad incollare per la fretta di andare a pranzo.

Cmq il codice dell'evento SelectedIndexChanged l'ho inserito nel code behind dello UserControl (FILE: UCProdotti.ascx.cs).

Ti posto il codice di questo file:
------------------------------------

protected void sel_change(object sender, EventArgs e)
{
if (cmb_tipo.SelectedValue != "0")
{
lbl_selection.Text = cmb_tipo.SelectedItem.Text;
load_select.LoadMenu("t_categorie", cmb_cat, "tipo", cmb_tipo.SelectedValue.ToString(), lbl_message);
cmb_cat.Visible = true;
}
else
{
cmb_cat.Items.Clear();
cmb_cat.Visible = false;
lbl_selection.Text = "Selezionare la tipologia.";
}
}

----------------------------------------------------------------------

Ho provato ad inserire questo codice nel file della pagina "Prodotti.cs" e così funziona.

Non capisco xchè se il DDL è all'interno del Control non scatena l'evento. (Ti premetto che ho provveduto ad inserire anche lAutoPostBack a true.

Grazie x la tua cortesissima disponibilità
Danilo

DANKARSOFT
hai provato a inserire un punto di interruzione?

ciao marco

Chi parla senza modestia troverà difficile rendere buone le proprie parole.
Confucio

http://nostromo.spaces.live.com/default.aspx
Ciao,

si ho inserito un punto di interruzione proprio nella prima parte del codice di seguito riportato, e ho notato che il caricamento della prima DDL lo fà, ma poi quando da quest DDL seleziono un'elemento (hardaware o software) noto che non ci và proprio. Praticamente non scatena proprio l'evento.

Questo è una parte del codice dell'oggetto nel file .ascx:
--------------------------------------------------

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="UCProdotti.ascx.cs" Inherits="App_UserControls_UCProdotti" ClassName="ClsProdotti" %>

<asp:DropDownList
ID="cmb_tipo" //OGGETTO DDL TIPO
runat="server"
ToolTip="Selezionare la tipologia del prodotto dall'elenco."
visible="true"
OnSelectedIndexChanged="sel_change"
AutoPostBack="true">
</asp:DropDownList><br />
<!-- ----------------------------------------------------------------- !-->
<asp:DropDownList
ID="cmb_cat" //OGGETTO DDL CATEGORIE
runat="server"
ToolTip="Selezionare la categoria del prodotto dall'elenco."
visible="false"
OnSelectedIndexChanged="cmb_cat_SelectedIndexChanged"
AutoPostBack="true">
</asp:DropDownList><br />
<!-- ----------------------------------------------------------------- !-->

.....etc, etc



Questo è una parte del codice con l'evento dell'oggetto nel file .ascx.cs:
---------------------------------------------------------------------------
using....
.......

public partial class App_UserControls_UCProdotti : System.Web.UI.UserControl
{
ClassLoadMenu load_select = new ClassLoadMenu();

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//Caricamento tipi di prodotti (es. Hardware, Software, etc.)
load_select.LoadMenu("t_tipo", cmb_tipo, lbl_message);
}
}
//cmb_tipo_SelectedIndexChanged
protected void sel_change(object sender, System.EventArgs e)
{
if (cmb_tipo.SelectedValue != "0")
{
lbl_selection.Text = cmb_tipo.SelectedItem.Text;
load_select.LoadMenu("t_categorie", cmb_cat, "tipo", cmb_tipo.SelectedValue.ToString(), lbl_message);
cmb_cat.Visible = true;
}
else
{
cmb_cat.Items.Clear();
cmb_cat.Visible = false;
lbl_selection.Text = "Selezionare la tipologia.";
}
}
}

Attendo una tua risposta con ansia...grazie in anticipo.

Danilo

DANKARSOFT
non posso testare select.LoadMenu, comunque l'evento nello scenario che ho riprodotto viene generato correttamente.

non saprei. ricontrolla che da qualche parte la prima DDL non sia riassociata ai dati.

ciao marco

Chi parla senza modestia troverà difficile rendere buone le proprie parole.
Confucio

http://nostromo.spaces.live.com/default.aspx
La prima DDL viene associata alla fonte dati dalla creazione di un'oggetto come istanza della classe "LoadMenu" che mi va a caricare una DDL che gli vado a passare come parametro insieme al nome della tabella da leggere ed il nome di una label per visualizzare un'eventuale messaggio di errore o conferma di operazione avvenuta.

L'implementazione di questa "LoadMenu" fà anche riferimento ad un'altra classe creata per definire la connessione al DB da utilizzare la "ClassConnect".

Di seguito ti riporto il codice per limplementazione della classe "LoadMenu":
-----------------------------------------------------------------------------

public class ClassLoadMenu : ClassConnect
{
public string str_query;

public ClassLoadMenu()
{
//OpenConn(strconn);
}

//Metodo LoadMenu con per caricamento dati in DropDownList
public void LoadMenu(string tbl_name, DropDownList ctrl_name, Label lbl_message)
{
try
{
OpenConn(strconn);
str_query = "SELECT * FROM " + tbl_name;

qtext = str_query;
LoadDropDown(strconn, qtext);

SqlDataReader Datardr = MyComm.ExecuteReader();
ctrl_name.Items.Add(new ListItem(var_select,"0",true));

while (Datardr.Read())
{
ctrl_name.Items.Add(new ListItem(Datardr.GetString(1), Datardr.GetInt32(0).ToString(),true));
}
}

catch (Exception eX)
{
lbl_message.Text = eX.Message.ToString();// +strconn.ToString();
}

finally
{
MyConn.Close();
}

ctrl_name.DataBind();
}

-----------------------------------------------------------------------------

Questa classe l'ho utilizzata anche con altri UserControl presenti nel mio progetto e non mi da problemi (infatti non riesco proprio a capire che cosa ci possa essere che non va!)

Puoi indicarmi un modo per fare una verifica mirata?

Danilo

DANKARSOFT

DANKARSOFT

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.