如何在Datagrid中呈现选择题(选项个数不定)(也能答题哦~)

     上一篇文章《如何在Datagrid中呈现选择题(选项个数不定)(采用我的毕设数据库)》说了如何在Datagrid中动态添加 RadioButtonList及其选项的方法,但是这个方法经过后续编程验证,在我的能力范围内,是中看不中用,具体见我在论坛发的求助帖:datagrid中动态插入RadioButtonList后如何取得RadioButtonList选中项的值

http://topic.csdn.net/u/20090406/11/354458ef-9c29-4fc2-a261-892519aa748a.html?seed=1691350323

ps:这个求助帖在我想出解决办法之后仍然没人理我。。。

      没办法啦,不能做个卷子能看不能写啊。绞尽脑汁,我想出了另一个方法,还更简单。那就是,不要动态添加RadioButtonList控件了,动态添加它的选项就好。


1.建立一个DataGrid取名DataGrid1,里面有题目ID(QuestionID,设置属性不可见)、题号(QSequence)、分值(Mark)、题干(QuestionText)和选项五个模板列。其中除了选项模板列以外都要添加ItemTemplate内容(Lable控件)并且绑定数据。至于选项模板列,我们给它ItemTemplate内容添加一个RadioButtonList控件(rb_answerItem).

PS:鬼知道我之前为什么要动态添加RadioButtonList控件。。。


2.在.cs文件中编写DataGrid绑定函数BindGrid()。仍然没有涉及对选项的数据操作。


3.生成DataGrid1的ItemDataBound事件。获取当前记录的题目ID,在选项表(QOption)中选出该题对应的选项,动态添加RadioButtonList项。

private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
     int qid=0;
          
     if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem)
     {    
           qid=Convert.ToInt32(((Label)(e.Item.FindControl("QuestionIDItem"))).Text);//获取题号
      }

       string strConn=System.Configuration.ConfigurationSettings.AppSettings["database"];
       SqlConnection cn=new SqlConnection(strConn);
       cn.Open();
      SqlCommand cm=new SqlCommand("select Heading,OptionText from QOption where QuestionID="+qid.ToString(),cn);
      SqlDataReader dr=cm.ExecuteReader();
      while(dr.Read())
      {
           RadioButtonList rb = (RadioButtonList)e.Item.FindControl("rb_answerItem");
           rb.Items.Add(new ListItem(dr["Heading"].ToString()+"."+dr["OptionText"].ToString(),dr["Heading"].ToString()));// 动态添加RadioButtonList成员即题目选项
        }
       cn.Close();      
}


4.页面上添加一个按钮控件bt_submit,编写代码如下:

private void bt_submit_Click(object sender, System.EventArgs e)
{
     for ( int i=0; i<this.DataGrid1.Items.Count; i++ )
     {
           nt btqid=Convert.ToInt32(((Label)(this.DataGrid1.Items[i].FindControl("QuestionIDItem"))).Text);//获取题号

           RadioButtonList rblist = (RadioButtonList)this.DataGrid1.Items[i].FindControl("rb_answerItem");
           int a = rblist.SelectedIndex;
           string answer=rblist.SelectedValue.ToString();

            string strConn=System.Configuration.ConfigurationSettings.AppSettings["database"];
            SqlConnection cn=new SqlConnection(strConn);
            cn.Open();
            SqlCommand cm=new SqlCommand("insert into StudentAnswer (StudentID,TestID,QuestionID,StudentAnswerText)values(1,1,'"+btqid.ToString()+"','"+answer+"')",cn);
            cm.ExecuteNonQuery();
            cn.Close();
        }
      
}


5.完事~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值