在线考试系统的考试页面,我有个题目表:id,Suject,A,B,C,D,answer,isManyCheck 其中isManyCheck是判断是否是多选题目,我想请问当我随机抽取题目出来的时候,如何根据isManyCheck动态生成RedioButtonList或CheckBoxList,并将题目绑定在上面?

解决方案 »

  1.   

    你判断啊! 在PAGE_LOAD 里面
      

  2.   

    如果要全部用控件实现的话,可以考虑用两个Panel控件,一个容纳RadioButtonList的,一个容纳CheckBoxList,在Page_Load中判断是否是多选题,如果是就显示容纳CheckBoxList的那个Panel,并绑定CheckBoxList,否则就显示容纳RadioButtonList的Panel,并且绑定RadioButtonList。
      

  3.   

    比如你的答案显示形式是这样子的:
    单选Radio  多选CheckBox  答案编号  答案内容
    ------------------------
    Radio      CheckBox     A        答案A
    Radio      CheckBox     B        答案B
    Radio      CheckBox     C        答案C
    Radio      CheckBox     D        答案D在页面Page_Load的时候,判断IsManyCheck字段,如果是多选,则隐藏掉Radio列;反之,如果是单选,则隐藏掉CheckBox列
      

  4.   

    在Page里放个Panel或者其他容器,然后在Page_Load事件里写生成代码阿(不要写在!Page.IsPostBack里,不然一刷新就没了),然后再对Raido或者CheckBox绑定数据就行了阿这没什么难的啊,问题反而是存储答案跟匹配答案麻烦点。。
      

  5.   

    if(单选){RadioButtonList}
    else{}
      

  6.   

    在加载页面到时候进行判断isManyCheck的值!
      

  7.   

    不错 只要把另一个panel隐藏就成了
      

  8.   

    楼主的思路是否是这样:if (!ismany)
    {
      myradio = new RedioButtonList(); 
      绑定单选题目。
    }
    else
    {
      mycheck = new CheckBoxList();
      绑定多选题目。
    }
      

  9.   

    把你要动态显示的单选按钮组或者是复选框组放到容器里,panel里或groupBox里都可以的,然后判断,如果是复选的时候,就让相对应的容器(panel或groupBox)显示,
    如果不是,就把相对应的容器(panel或groupBox)隐藏掉..
      

  10.   

    :id,Suject,A,B,C,D,answer,isManyCheck写一个抽象方法:
    public Control GetControl(DataRow dr)
    {
    如果isManyCheck==1(假如多选,相关逻辑省略)
    return new CheckBoxList()
    否则
    return new RedioButtonList()...
    }剩下的工作就是如何组织容器了
      

  11.   

    int titleNum = 0;
            int NoRubric = 1;
            //生成外table
            Table outSideTable = new Table();
            outSideTable.CssClass = "titleColor";
            outSideTable.Width = Unit.Parse("100%");
            DataTable ExaningRubricList = bllExamingRubric.GetPaperRubric(testPaperId);//读取试卷题目信息        int sumNum = 0;
            //生成table来装试题
            for (int i = 0; i < (ExaningRubricList.Rows.Count + 4); i++)
            {
                TableRow row = new TableRow();
                TableCell td = new TableCell();
                td.Width = Unit.Parse("100%");
                row.Cells.Add(td);
                outSideTable.Rows.Add(row);
                //计算题目分值
                if (i < ExaningRubricList.Rows.Count)
                {
                    sumNum += int.Parse(ExaningRubricList.Rows[i]["Rubric_Number"].ToString());
                }
            }
            lblSumNumber.Text = sumNum.ToString();        //获取该试卷里的全部单选题
            DataRow[] rblRubrics = ExaningRubricList.Select(String.Format("Rubric_Sort = 2"));//你需要改的地方,修改判断条件String.Format("Rubric_Sort = 2")就可以了        if (rblRubrics.Length > 0)
            {
                Label lblRblRubricTitle = new Label();
                lblRblRubricTitle.CssClass = "fontSize";
                lblRblRubricTitle.Text = "<b>一、单选题:</b>";
                outSideTable.Rows[(NoRubric - 1 + titleNum)].Cells[0].Controls.Add(lblRblRubricTitle);
            }
            //循环生成控件并显示
            foreach (DataRow rblRubric in rblRubrics)
            {
                //设置控件添加的位置
                outSideTable.Rows[((NoRubric - 1 + titleNum) + titleNum)].Cells[0].Controls.Add(setTable(rblRubric, 2, NoRubric));// setTable方法就不发了,你自己应该写的出来
                NoRubric++;
            }        //生成多选题
            DataRow[] cblRubrics = ExaningRubricList.Select(String.Format("Rubric_Sort = 3"));
            if (cblRubrics.Length > 0)
            {
                Label lblCblRubricTitle = new Label();
                lblCblRubricTitle.CssClass = "fontSize";
                lblCblRubricTitle.Text = "<b>二、多选题:</b>";
                outSideTable.Rows[(NoRubric - 1 + titleNum)].Cells[0].Controls.Add(lblCblRubricTitle);
            }        foreach (DataRow cblRubric in cblRubrics)
            {
                //设置试题显示位置
                outSideTable.Rows[(NoRubric - 1 + titleNum)].Cells[0].Controls.Add(setTable(cblRubric, 3, NoRubric));
                NoRubric++;
            }