我在做在线考试系统,我在考试页面放了一个DataList,ItemTemplate里面放了一个RadioButtonList,有A,B,C,D四个项,下面的代码就是绑定题目和评分的部分,我想问的就是如何获取用户做错的题目信息。。能给个代码更好了,我是初学者    //用于存储正确答案
    public string singleanswer = "";
    
    //用于存储考生答案
    public string singlestudentAnswer = "";
        //用于存储分数
    public int point = 0;    //页面加载
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            
            this.getCom1(str);//绑定题目
            
        }
        
    }
   
   //获取题目并绑定到DataList上
    protected void getCom1(string str)
    {        List<SubjectTeble> list =//通过业务层返回题目,SubjectTable字段:id,subject,A,B,C,D,anwser,LessonId  备注:LessonId是知识点表的外键,标识这个题是哪个知识
        this.DataList1.DataSource = list;
        this.DataList1.DataBind();
        //获取正确答案
        foreach (SubjectTeble st in list)
        {
            singleanswer += st.Anwser.ToString();
        }
        Session["singleanswer"] = singleanswer;//储存单选题的答案
    }  //提交试卷
    protected void btnSubmit_Click(object sender, EventArgs e)
    {
        string singleanswer = Session["singleanswer"].ToString();
                for (int i = 0; i < DataList1.Items.Count; i++)
        {
            RadioButtonList rbl = (RadioButtonList)(DataList1.Items[i].FindControl("RadioButtonList1"));
           
            if (rbl != null)
            {
                if (rbl.SelectedValue.ToString() != "")
                {
                    singlestudentAnswer += rbl.SelectedValue.ToString();//因为我用的是字符串将用户选的答案拼接然后与真正答案对比来判分,
                    
                }
                else
                {
                   singlestudentAnswer += "0";//如果没选就默认答案为0,答案只有ABCD,没有0,就可以算错了一题
                }            }
        }
     }        //计算分数
        //单选题分数
        for (int i = 0; i < singleanswer.Length; i++)
        {
            if (singleanswer.Substring(i, 1).Equals(singlestudentAnswer.Substring(i, 1)))
                point += 2;//对一题得2分
        }     
    }

解决方案 »

  1.   

    singleanswer += st.Anwser.ToString();
    在这里用一个SortedDictionary类来放答案和题号的信息for (int i = 0; i < singleanswer.Length; i++)
            {
                if (singleanswer.Substring(i, 1).Equals(singlestudentAnswer.Substring(i, 1)))
                    point += 2;//对一题得2分
            }这里如果是答案是错误的取相应的题号出来
      

  2.   

    SortedDictionary怎么用?    SortedDictionary<"",SubjectTable>这么用吗?
      

  3.   

     public string singleanswer = "";
        
    这里就不用字符串了用
    SortedList Info=new SortedList();
    Info.Add("答案",“题号”);
      

  4.   

    好久没写代码了 提一下思路
    用一个count来记正确答案的数量
    在*分数.
    for (int i = 0; i < DataList1.Items.Count; i++)
            {
                RadioButtonList rbl = (RadioButtonList)(DataList1.Items[i].FindControl("RadioButtonList1"));
               
                if (rbl != null)
                {
                    if (rbl.SelectedValue.ToString() != "")
                    {
                        count++;
                      }
                }
            }这是计算总分.
    如果您想获取用户做错的信息.
    把正确答案用红色?
    把选过的错误答案用别的颜色?
      

  5.   


            //计算分数
            //单选题分数
            for (int i = 0; i < singleanswer.Length; i++)
            {
                if (singleanswer.Substring(i, 1).Equals(singlestudentAnswer.Substring(i, 1)))
                    point += 2;//对一题得2分
                          else{
                   // 用个list 或其他 装载错误的题号  再处理 不就可以了吗
                                    listErrorAnswer.Add(i.ToString());
                }
                   }
      

  6.   

    http://topic.csdn.net/u/20090120/08/5d63df85-6e16-405a-ba0d-c0722a74e58a.html下载源代码,看:Mainlist.aspx当用版主身份登陆时,可以管理页面,在id="DL_Main"控件中有<asp:CheckBox id="selected" runat="server">复选框,就应该和你的差不多,这里的只用了一个 ,你的4个 。具体操作他的代码如下:
    private void ModifyKind(int X)
    {
                //X=  0:删除帖子 1:普通  3:置顶 4:置顶且首页置顶
    for (int i=0;i<DL_Main.Items.Count;i++ )
    {
    if (((CheckBox)DL_Main.Items[i].FindControl("selected")).Checked==true)
    {
    string s=((System.Web.UI.WebControls.HyperLink)DL_Main.Items[i].FindControl("Hyperlink3")).Text;
    DBOperate.ExcSQL("UPDATE Questions SET kind ="+X.ToString()+" WHERE (Q_ID = "+s+")");
    }
    }
    this.Response.Redirect(this.Request.Url.ToString());
    }-----
    重点取得它的值的方法:((CheckBox)DL_Main.Items[i].FindControl("selected")).Checked,复选框得名字"selected",修改它就可以找到对应得控件了。
    不知道是不是你想得到的结果。
      

  7.   

    RadioButtonList 做单选 CheckBox一般用作多选题目