我做的是一个在线考试系统,生成选择题的代码如下:
SqlCommand myCommand = new SqlCommand("select top 10 * from 选择题 order by newid()",dbconn);
SqlDataReader myReader = myCommand.ExecuteReader();
while(myReader.Read())
{
Literal LitTxt=new Literal();
Literal LitBl=new Literal();
CheckBoxList ChkMc=new CheckBoxList();
// RadioButtonList ChkMc=new RadioButtonList();
ChkMc.ID="ChkMc"+i.ToString();
LitTxt.Text=i.ToString()+"、 "+Server.HtmlEncode(myReader.GetValue(1).ToString())+"<BR><Blockquote>";
LitBl.Text="</Blockquote><HR>";
ChkMc.Font.Size=11;
for(int j=1;j<=4;j++)
{
ChkMc.Items.Add(Server.HtmlEncode(myReader.GetValue(1+j).ToString()));
ChkMc.Items[j-1].Value=j.ToString();
}
mcStr+=myReader.GetValue(6).ToString(); //mcStr是存储随机生成试题答案的字符串变量
MyPanel.Controls.Add(LitTxt);      //MyPanel为Panel容器控件
    MyPanel.Controls.Add(ChkMc);
   MyPanel.Controls.Add(LitBl);
   i++;
}
myReader.Close();
dbconn.Close();现用如下代码来获取考生选择的答案for(int i=1;i<=10;i++) //由于随机生成了10道题,所以循环10次
 { 
  for(int j=0;j<4;j++)
   if(Request.Form["ChkMc"+i.ToString()+":"+j.ToString()]!=null)
    mcs+="1"; //mcs是存储考生所选答案的字符串变量,已选用"1"表示,未选用"0"表示
   else
    mcs+="0";
 }
上面的代码我试过了,可以得到预想的结果,上面生成的是多选题,用的是CheckBoxList,但如果我要改成实现单选题的效果而把CheckBoxList改为RadioButtonList,请问应该如何获取考生所选择的答案呢?

解决方案 »

  1.   

    你可以把RadioButtonList中选中的答案先存储在一个二维函数中,然后通过位置与数据库中的答案相对应从而判断(但要求每个单选的选项数目相同)
      

  2.   

    to:MonkWang(象写情书一样写程序)
    可以给些具体的代码吗?to:lingyunfeipu(凌云)
    能把你的代码发给我学习一下吗?
      

  3.   

    呵呵 
    支付一下两重循环不行吗?一重循环是Radiobuttonlist 子循环是List中的选项……
      

  4.   

    to:ken_flash(AnotherBug)
    你能说清楚一些具体怎么做吗?
      

  5.   

    看来想在csdn上找人帮我解决问题是没多大希望了。
    csdn啊,太让我失望了!
      

  6.   

    无论是单选还是多选,最好封装为控件,每一题就是一个控件,通过一个Collection属性传入选项。在控件之内,你在CreateChildControls()事件里面生成子控件(例如CheckBoxList/RadioButtonList),然后改控件对外暴露一个属性表示选择了哪个选项,而该属性通过CheckBoxList/RadioButtonList的属性读取,而不要通过Request.Form读取。你现在这样通过Request.Form读取,其实是不可靠的,代码仅当你的控件在INamingContainer外的时候有效,如果你以后更改了页面布局,把动态创建的控件放到INamingContainer内就读取不到值了。
      

  7.   

    to:xitie112()
    你有代码?我真的需要,请你发给我吧,
    谢谢!
      

  8.   

    to: cat_hsfz()
    我是个初学者,你说的我不是太懂,如果你能给我些具体的代码那就最好了。
      

  9.   

    现用如下代码来获取考生选择的答案for(int i=1;i<=10;i++) //由于随机生成了10道题,所以循环10次
     { 
      for(int j=0;j<4;j++)
       if(Request.Form["ChkMc"+i.ToString()+":"+j.ToString()]!=null)
        mcs+="1"; //mcs是存储考生所选答案的字符串变量,已选用"1"表示,未选用"0"表示
       else
        mcs+="0";
     }
    上面的代码我试过了,可以得到预想的结果,上面生成的是多选题,用的是CheckBoxList,但如果我要改成实现单选题的效果而把CheckBoxList改为RadioButtonList,请问应该如何获取考生所选择的答案呢?你已经实现了多选项,那么单的应该容易解决啊。你可以生成一个单选按钮组(一个组里只有一个单选可以被选中的),一组里有10个单行按钮,然后你再绑定到你随机生成的题。
    我想应该可以解决了吧。
      

  10.   

    to:Eilien(我要成长,我正在成长,) 
    你说的不是动态生成那些控件吧?
    我的程序里生成的10个RadioButtonList只是举个例子,这个数目最终是让用户来定的,所以如果是静态的做这10个RadioButtonList满足不了要求啊!