2009-05-15 3 views
2

У меня есть страница, которая, в зависимости от ввода с предыдущей страницы, содержит различное количество разных вопросов, извлеченных из базы данных. Кажется, я не могу найти пример этого онлайн: для каждого вопроса, который отображается, мне нужно программно генерировать DropDownList, чтобы пользователь мог выбрать «да» или «нет» для каждого из этих вопросов. Надеюсь, кто-то здесь может дать мне какое-то направление, где искать. Благодарю.Программно создавая WebControls

ответ

3

Возможно, вам лучше всего использовать элемент управления Repeater с шаблоном, который только содержит DropDownList со статическими элементами списка. Что-то вроде этого:

<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> 

Затем в код позади, вы можете выполнить запрос и привязать результаты к ретранслятору.

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

это псевдо, но может помочь ...

//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

Предложение Womps по управлению ретранслятором, вероятно, лучше, если единственное, что меняется, это действительно вопрос. Но если у вас были «типы» вопросов, которые вызвали разные механизмы ответа, скажем, int, тогда вам, вероятно, понадобится что-то вроде этого ... – RSolberg

+0

с помощью разных механизмов ответа. Я предлагаю, чтобы, возможно, у вас есть вход, который позволяет int, возможно, тот, который является да/нет, может быть, тот, который отображает цвета и т. д. – RSolberg

+0

Метод Yeary womp больше подходит для моей проблемы, но только случайно, поскольку я не объяснил подробно подробно в вопросе, но спасибо за разделяя этот метод. Я никогда этого не видел. –

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 
Смежные вопросы