各位高手你们好:下面是明日科技在线考试系统,我想改成随机生成试题,随机生成的试题顺序和计算成绩的顺序一致。我做了下面3处改动,运行结果能打开考试页面做题,但是点击交卷按钮时出错提示:未将对象引用设置到对象的实例.这一行错行 64:             DataRow[]row1 = dt.Select("id=" + id);请高手指点一下上面的改动对不对,下面怎样改。
 
1:前台Aspx中加了
<tr>
                                    <td colspan="2">
                                    <asp:HiddenField ID="hidGenId1" runat="server" Value='<%#DataBinder.Eval(Container.DataItem, "id")%>' />
 
                                </tr>
2:后台
btnSubmit_Click下面加了
for (int i = 0; i < DataList1.Items.Count; i++)
 
        {
         string id=((HiddenField)(DataList1.Items[i].FindControl("hidGenID1"))).Value;
        }
3://核对单选题答案中加了
  case 3:
SqlDataAdapter myadapter3 = new SqlDataAdapter("select id,que_answer"
                    + " from tb_Questions where que_type='数学题'and que_lessonid="
                    + dd1 + " and que_taotiid=" + dd2 + " order by newid()", con);
                DataSet myds3 = new DataSet();
                myadapter3.Fill(myds3);
string id = ((HiddenField)(DataList1.Items[i].FindControl("hidGenID1"))).Value;
                DataTable dt = (DataTable)ViewState["dt"];
                DataRow[] row1 = dt.Select("id=" + id);
                
                //计算单选题成
                

解决方案 »

  1.   

    因为楼主代码长没发完在这里补上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;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.   

    类型转换用 as使用前先判断是否 null
      

  3.   

    DataTable dt = (DataTable)ViewState["dt"];  dt 有数据么   行数大于0么
      

  4.   

    if(dt.Rows.count>0)
    {
    DataRow[] row1 = dt.Select("id=" + id);
    }
      

  5.   

    VS里面最牛逼最神奇的BUG断点。查看sql语句
      

  6.   

    在前面加个:
    if(dt.Rows.Count==0&dt==null)
    {
         return;
    }else{
       
      if(id==null)
        {
          提示错误信息!
         }else{
            DataRow[] row1 = dt.Select("id=" + id);      }
    }
      

  7.   


    写错了点东西应该是:if(dt.Rows.Count==0||dt==null)
    {
      return;
    }else{
       
      if(id==null)
      {
      提示错误信息!
      }else{
      DataRow[] row1 = dt.Select("id=" + id);  }
    }