ASP.net - 动态显示控件

时间:2010-01-07 09:48:25

标签: asp.net data-binding

我正在开发测验项目。在DetailsView中,我想显示问题和答案。

答案的数量因问题而异。示例

1 ) C# Support

   (i)  Generics
   (ii) LINQ
   (iii)EntLib  

2 ) Find the odd one
    (i)  DB2
    (ii) Oracle
    (iii)MS-Access 
    (iv) Sql Server
    (v)  Javascript

所以我无法修复单选按钮的数量。有些问题可能有多个答案。所以我需要显示复选框而不是单选按钮。

我的问题是如何动态生成单选按钮或复选框?

2 个答案:

答案 0 :(得分:2)

为每个问题创建一个RadioButtonList或CheckBoxList,并使用其Items集合添加答案。

C#中非常简单的例子:

class Question
{
    public string QuestionText;
    public List<string> Answers;
}

protected void AddQuestionsToContainer(Control container, List<Question> questions)
{
    foreach (Question q in questions)
    {
        var qt = new Label();
        qt.Text = q.QuestionText;
        container.Controls.Add(qt);

        var rbl = new RadioButtonList();

        foreach (string answer in q.Answers)
        {
            rbl.Items.Add(new ListItem(answer));
        }

        container.Controls.Add(rbl);
    }
}

答案 1 :(得分:1)

我认为你的问题更具体地说是如何确定哪个测验问题有多个答案。

如果我是正确的,你需要在DB中的表中有一个额外的列isMultipleAnswers BIT(或者你需要为每个问题设置一个标志来源),并处理一个事件。 DetailView与DataBinding一样,检查此字段的值,基于添加RadioButtonList或CheckBoxList。

希望这有帮助!

顺便说一下,你为什么不使用Repeater?