Ciao a tutti,
vi spiego subito qual'è il mio problema. Dovrei creare in una pagia ASP .NET un controllo che mi consenta di esporre all'utente delle domande (una per volta) e le relative risposte legate a quella domanda. Domande e Risposte sono due tabelle separate del mio DB sql server 2005 legate dalla chiave ID_Domanda che identifica univocamente una domanda nella tabella domande e nella tabella risposte ho il campo ID_Domanda che permette di identificare quelle risposte legate a quella domanda. Avevo pensato di creare in modo dinamico un controllo wizard. Inizialmente a design time il wizardpresenta solo lo step di start. Al click su prosegui vorrei che venisse creato un nuovo step con titolo uguale alla domanda root che è l'unica che presenta ID=ID_DomandaPadre e sempre nello stesso step deve comparire una dropdowlist con le risposte legate alla domanda root. Questa parte sono riuscito a farla con il seguente codice inserito nel PreInit della pagina
codice:
string constr = ConfigurationManager.ConnectionStrings["MYConnectionString"].ConnectionString;
SqlConnection connection = new SqlConnection(constr);
SqlDataAdapter sda = new SqlDataAdapter("SELECT ID_Domanda, Testo, ID_Domanda_Padre, Valore FROM Domande WHERE ID_Domanda = ID_Domanda_Padre ORDER BY ID_Domanda", connection);
DataSet ds = new DataSet();
sda.Fill(ds, "Domande");
for (int i = 0; i <= ds.Tables["Domande"].Rows.Count - 1; i++)
{
WizardStep newStep = new WizardStep();
newStep.ID = ds.Tables["Domande"].Rows[i]["ID_Domanda"].ToString();
newStep.Title = "D" + ds.Tables["Domande"].Rows[i]["ID_Domanda"].ToString()+"-"+ ds.Tables["Domande"].Rows[i]["Testo"].ToString();
newStep.AllowReturn = false;
newStep.StepType = WizardStepType.Step;
DropDownList ddltest = new DropDownList();
ddltest.AutoPostBack = true;
ddltest.ID = "ddltest";
ddltest.DataSourceID = "SqlDataSource1";
ddltest.DataTextField = "Testo";
ddltest.DataValueField = "ID_Risposta";
ddltest.SelectedIndexChanged += new EventHandler(ddltest_SelectedIndexChanged);
Label lblTest = new Label();
lblTest.Text = "Seleziona Risposta";
newStep.Controls.Add(lblTest);
newStep.Controls.Add(ddltest);
Wizard1.WizardSteps.Add(newStep);
ora vorrei che alla scleta della risposta nella dropdownlist venga creato un nuovo step simile al primo in cui ho la domanda che ha come ID_Domanda_Padre la precedente domanda e come risposte possibili tutte le risposte con ID_Domanda uguale alla domada trovata. A questo punto ho due problemi:
1) Se durante il PreInit non ricreo il precedente step (quello della domanda root) quando provo adandare avanti o clicco sulla nuova dropdownlist ricevo il seguente errore
"ActiveViewIndex is being set to '2'. It must be smaller than the current number of View controls '2'. For dynamically added views, make sure they are added before or in Page_PreInit event";
2) se ricreo anche il primo step ho difficoltà parametrizzare il meccanismo di creazione dinamica degli step in base alle risposte che l'utente sceglie perchè ogni volta dovrei capire quali domande e risposte sono state selezionate nei passi precedenti e ricreare gli stepfino a quello attuale
Vi chiedo allora se quello di utilizzare il controllo wizard dinamicamente è la giusta soluzione per quello che dovrei realizzare e se è csi come dovrei lavorare sugli step per ricostruire ad ogni passo tutte le scelte precendenti dell'utente
Spero che la mia spiegazione del problema e della soluzione che sto cercando di adottare è chiara.
Grazie