2009-05-15 10 views
2

J'ai une page qui, selon la saisie d'une page précédente, répertorie un nombre variable de questions différentes extraites d'une base de données. Je n'arrive pas à trouver un exemple de ceci en ligne: Pour chaque question qui est affichée, j'ai besoin de générer par programme un DropDownList afin que l'utilisateur puisse sélectionner oui ou non pour chacune de ces questions. En espérant que quelqu'un ici puisse me donner des indications sur où regarder. Merci.Génération de WebControls par programmation

Répondre

3

probablement votre meilleur pari est d'utiliser le contrôle de répéteur avec un modèle qui contient juste le dropdownlist avec des éléments de liste statiques. Quelque chose comme ceci:

<asp:Repeater runat="server" id="questionRepeater"> 
<HeaderTemplate> 
    //some html 
</HeaderTemplate> 
<ItemTemplate> 
<div align=center> 
<asp:Label runat="server"><%# DataBinder.Eval(Container.DataItem,"questionColumn")%></asp:Label> 
<asp:DropDownList runat="server"> 
    <asp:ListItem Text="Yes" Value="1" /> 
    <asp:ListItem text="No" Value="0" /> 
</asp:DropDownList> 
</ItemTemplate> 
</asp:Repeater> 

Puis dans votre code derrière, vous pouvez exécuter votre requête et lier les résultats au répéteur.

private void Page_Load(object sender, System.EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
    SqlConnection db = new SqlConnection("Server=server;UID=uid;PWD=password;Database=whatever"); 
    string sSQL = "Select questionColumn from Questions"; 
    SqlCommand cmd = new SqlCommand(sSQL, conDotNet); 
    db.Open(); 
    SqlDataReader dtrCat = cmd.ExecuteReader(); 
    questionRepeater.DataSource = dtrCat; 
    questionRepeater.DataBind(); 
    } 
} 
2

ce pseudo est, mais peut aider ...

//essentially, run through loop of questions and for each 
//add the question and yes/no stuff.. 
///PlaceHolder is a ContentPlaceholder Control within the .aspx page. 
foreach(inputtype input in this.inputs) 
{ 
    Label lbl = new Label(); 
    lbl.Text = input.Question; 

    DropDownList ddl = new DropDownList(); 
    ddl.ID = input.QuestionID; 
    ddl.DataSource = YesNoDataTable; 
    ddl.DataBind(); 

    this.PlaceHolder.Controls.Add(lbl); 
    this.PlaceHolder.Controls.Add(ddl); 
} 
+0

La suggestion Womps sur le contrôle du répéteur est probablement meilleure si la seule chose qui change est bien la question. Mais si vous aviez des «types» de questions qui déclenchent des mécanismes de réponse différents, disons un int, alors vous auriez probablement besoin de quelque chose comme ça ... – RSolberg

+0

par des mécanismes de réponse différents, je suggère que vous ayez peut-être un int, peut-être un qui est un oui/non, peut-être un qui liste les couleurs, etc. – RSolberg

+0

Ouais la méthode de womp est plus adaptée à mon problème, mais seulement par hasard car je n'ai pas expliqué beaucoup en détail dans la question, mais merci pour partage cette méthode. Je ne l'avais jamais vu auparavant. –

0
Dim tDropDownList As DropDownList = Nothing 
Dim tQuestion As String = String.Empty 

For Each tQuestion In tQuestions 
    tDropDownList = New DropDownList 
    tDropDownList.Name = "someName here" 
    tDropDownList.Items.Add("Yes") 
    tDropDownList.Items.Add("No") 
    Page.Constrols.Add(tDropDownList) 
Next 
Questions connexes