代码较长通过回复上传的请高手们谅解。
1:我在从数据库中选择单选题和核对单选题答案中添加了下面的语句用来保存正确答案(斜体部分)程序运行(交卷)不报错。老师您看看这样添加对不对?如果不对应该怎样保存正确答案?2: 如果正确,在核对单选题答案中怎样把DataTable dt = (DataTable)Session["que_answer"];赋值于DataRow[] row1  ?
  //从数据库中选择单选题
            case 1:
                SqlDataAdapter myadapter1 = new SqlDataAdapter("select  * "
                    + "from tb_Questions where que_type='语文题'and que_lessonid='"
                    + dd1 + "'and que_taotiid='" + dd2 + "'order by newid()", con);
                DataSet myds1 = new DataSet();
                myadapter1.Fill(myds1);
                DataList1.DataSource = myds1;
                DataList1.DataSource = myds1.Tables[0];
                Session["que_answer"] = myds1.Tables[0];
                DataList1.DataBind();
            //生成单选题题号
                int[] array;
                array = new int[DataList1.Items.Count];
                array[0] = 0;
                for (int tID1 = 1; tID1 <= DataList1.Items.Count; tID1++)
                {
                    Label lblSelect = (Label)DataList1.Items[tID1 - 1].FindControl("Label2");
                    lblSelect.Text = tID1.ToString() + "、";
                    array[i] = tID1;
                }
                break;

解决方案 »

  1.   

    //核对单选题答案
                case 2:
                    SqlDataAdapter myadapter2 = new SqlDataAdapter("select que_answer"
                        + " from tb_Questions where que_type='语文题'and que_lessonid="
                        + dd1 + " and que_taotiid=" + dd2 + " order by id desc", con);
                    DataSet myds2 = new DataSet();
                    DataTable dt = (DataTable)Session["que_answer"];                Myadapter2.Fill(myds2);
                    DataRow[] row1 = myds2.Tables[0].Select();
                    //计算单选题成
                    foreach (DataRow answer1 in row1)
                    {
                        int_row1 += 1;
                        if (int_row1<= 10)
                        {
                            RadioButtonList rbl = (RadioButtonList)(DataList1.Items[int_row1 - 1].FindControl("RadioButtonList1"));
                            if (rbl.SelectedValue == "")
                            {
                                this.lblSel.Text = int_row1Point.ToString();
                            }
                            else
                            {
                                float ti = DataList1.Items.Count;
                                if (answer1["que_answer"].ToString().Trim() == rbl.SelectedValue.ToString().Trim())
                                {
                                    int_row1Point += 50 / ti;
                                    this.lblSel.Text = int_row1Point.ToString();
                                }
                            }
                        }
                    }
                    break;
      

  2.   

    DataTable dt =Session["que_answer"]==null?new DataTable(): (DataTable)Session["que_answer"];DataRow[] row1=dt.AsEnumerable().ToArray();
      

  3.   

    老师您好谢谢您这么快回复。这句dt.AsEnumerable().ToArray();
    怎样解释?我是一个初学者。
      

  4.   

    AsEnumerable():返回一个 IEnumerable<T> 对象,其泛型参数 T 为 DataRow。 此对象可用在 LINQ 表达式或方法查询中。
    DataRow[] row1=dt.AsEnumerable().ToArray();
    也可心这样理解:
    DataRow[] row1=(from t in dt.AsEnumerable() select t).ToArray();
      

  5.   

    http://msdn.microsoft.com/zh-cn/library/system.data.datatableextensions.asenumerable.aspx
      

  6.   

    老师我很菜把这句也给我解释一下。谢谢了。DataTable dt =Session["que_answer"]==null?new DataTable(): (DataTable)Session["que_answer"];
      

  7.   

    这句用到了三目运算符
    等价于:
    DataTable dt;
    if(Session["que_answer"]==null)
    {
      dt=new DataTable();
    }
    else
    {
      dt=(DataTable)Session["que_answer"];
    }
      

  8.   

    谢谢您,这一句懂了。怎样把DataTable dt = (DataTable)Session["que_answer"];赋值于DataRow[] row1 ?
      

  9.   

    老师,现在提示:编译器错误消息: CS1061: “System.Data.EnumerableRowCollection<System.Data.DataRow>”不包含“ToArray”的定义,并且找不到可接受类型为“System.Data.EnumerableRowCollection<System.Data.DataRow>”的第一个参数的扩展方法“ToArray”(是否缺少 using 指令或程序集引用?)
      

  10.   

    说的对我已经调试好了。但是又出现一个问题,单选题和多选题只有一个题计算成绩正确,请帮我看看下面代码哪里错了case 1:
                    SqlDataAdapter myadapter1 = new SqlDataAdapter("select  * "
                        + "from tb_Questions where que_type='语文题'and que_lessonid='"
                        + dd1 + "'and que_taotiid='" + dd2 + "'order by newid()", con);
                    DataSet myds1 = new DataSet();
                    myadapter1.Fill(myds1);
                    DataList1.DataSource = myds1;
                    
                    DataList1.DataBind();
                    //生成单选题题号
                    for (int tID1 = 1; tID1 <= DataList1.Items.Count; tID1++)
                    {
                        Label lblSelect = (Label)DataList1.Items[tID1 - 1].FindControl("Label2");
                        lblSelect.Text = tID1.ToString() + "、";
                        DataList1.DataSource = myds1.Tables[0];
                        Session["id"] = myds1.Tables[0];
                        
                    }
                     
                    break;这样保存对吗
      

  11.   

    这是计算成绩的代码case 2:
                    DataTable dt;
                    if (Session["id"] == null)
                    {
                        dt = new DataTable();
                    }
                    else
                    {
                        dt = (DataTable)Session["id"];
                    }                DataRow[] row1 = dt.AsEnumerable().ToArray();                //计算单选题成
                    foreach (DataRow answer1 in row1)
                    {
                        int_row1 += 1;
                        if (int_row1<= 10)
                        {
                            RadioButtonList rbl = (RadioButtonList)(DataList1.Items[int_row1 - 1].FindControl("RadioButtonList1"));
                            if (rbl.SelectedValue == "")
                            {
                                this.lblSel.Text = int_row1Point.ToString();
                            }
                            else
                            {
                                float ti = DataList1.Items.Count;
                                if (answer1["que_answer"].ToString().Trim() == rbl.SelectedValue.ToString().Trim())
                                {
                                    int_row1Point += 50 / ti;
                                    this.lblSel.Text = int_row1Point.ToString();
                                }
                            }
                        }
                    }
                    break;