ASP.NET制作调查问卷
2023-09-14 08:56:49 时间
【项目需求】 最近几天,一直在做考试系统的维护。这一次的考试,思政部的老师提出了一个需求,希望在学生考试前填写一个关于本学期本学科的几个问题调查,以便更加了解学生情况。调查问卷共有三种题型:单选、多选和填空。我负责的是多选题型。 【项目概要】 ASP.NET WebForm开发框架,简单的三层开发。开发环境VS2012,SQL Server2008R2数据库。 【项目开发】 我们决定在已有的基础评教系统中增加一个新的页面,也就是整个调查问卷的内容。因为整个调查问卷只有四道多选题,所以,我选择把题目直接写在前台页面上,利用复选框按钮,便可实现学生进行多项选择。 前台第一个多选题代码如下:
div 12、有些思政课老师讲课缺乏吸引力,你认为主要原因是(可多选)( ) /div br/ br/ input name="ans12" type="checkbox" id="Checkbox0" value="A.理论功底欠缺,缺乏必要的广度和深度" A.理论功底欠缺,缺乏必要的广度和深度 br/ br/ input name="ans12" type="checkbox" id="Checkbox1" value="B 教学方式陈旧、单一,难以激发学习兴趣" B 教学方式陈旧、单一,难以激发学习兴趣 br/ br/ input name="ans12" type="checkbox" id="Checkbox2" value="C 讲授内容与社会现实脱节,照本宣科" C 讲授内容与社会现实脱节,照本宣科 br/ br/ input name="ans12" type="checkbox" id="Checkbox3" value="D 语言表达缺乏感染力,课堂气氛沉闷" D 语言表达缺乏感染力,课堂气氛沉闷 br/ br/ input name="ans12" type="checkbox" id="Checkbox4" value="E 高高在上,过分严肃,缺乏亲近感 " E 高高在上,过分严肃,缺乏亲近感 br/ br/ input name="ans12" type="checkbox" id="Checkbox5" value="F这门课内容空泛、枯燥,无实际用途" F这门课内容空泛、枯燥,无实际用途 br/ br/ input name="ans12" type="checkbox" id="Checkbox6" value="G 上课仅为完成教学任务,对学生漠不关心,缺少沟通" G 上课仅为完成教学任务,对学生漠不关心,缺少沟通 br/ br/
前台设计好了,多选题目也就出好了。具体效果如下:
在前台,我是将一个多选题下的所有选项都定义为name值相同,而value值不同的复选框,接下来,我要做的就是获取前台每一个学生每道题下所选的项。 js代码如下:
function isChecked() { //多选第一题 var obj = document.getElementsByName(ans12); var s = ""; for (var i = 0; i obj.length; i++) { if (obj[i].checked) s += obj[i].value + ,; document.getElementById("TextBox1").value = s; //多选第二题 var obj = document.getElementsByName(ans13); var s = ""; for (var i = 0; i obj.length; i++) { if (obj[i].checked) s += obj[i].value + ,; document.getElementById("TextBox2").value = s; //多选第三题 var obj = document.getElementsByName(ans14); var s = ""; for (var i = 0; i obj.length; i++) { if (obj[i].checked) s += obj[i].value + ,; document.getElementById("TextBox3").value = s; //多选第四题 var obj = document.getElementsByName(ans15); var s = ""; for (var i = 0; i obj.length; i++) { if (obj[i].checked) s += obj[i].value + ,; document.getElementById("TextBox4").value = s; }
通过js,便可以按名称获取每道多选题下的选中值,将获取到的值赋值给对应的隐藏文本框中,便于将值存入到数据库中进行查询。
最后的工作,便是需要将值存入到数据库中。这一次存入数据库,用的方式是创建和数据库中对应的DataSet和DataTable,直接在DataSet下添加DataTable。 D层数据访问层代码:
public Boolean AddCheckAnswer(DataSet dsCheckAnswer, SqlConnection sqlCon, SqlTransaction sqlTran) //定义布尔型标记变量, //添加多选题答案信息 Boolean flagAddCheckAnswer; //调用sqlHelper的"批量导入datatable表"的方法 flagAddCheckAnswer = sqlHelper.InsertTable(dsCheckAnswer.Tables["dt_CheckAnswer"], "T_CheckAnswer", dsCheckAnswer.Tables["dt_CheckAnswer"].Columns, sqlCon, sqlTran); //返回结果 return (flagAddCheckAnswer); }
B层业务逻辑层代码:
public Boolean AddCheckAnswer(DataSet dsCheckAnswer) checkchoiceDAL = new CheckChoiceDAL(); //实例化建议操作类 SqlConnection sqlCon = new SqlConnection(ConfigurationManager.ConnectionStrings["strConnDB"].ConnectionString); //打开连接 sqlCon.Open(); //定义事务 SqlTransaction sqlTran = sqlCon.BeginTransaction(IsolationLevel.ReadCommitted); //用try...Catch...finally保证事务在出错时会回滚 try //添加建议 Boolean flagAddCheckAnswer = checkchoiceDAL.AddCheckAnswer(dsCheckAnswer, sqlCon, sqlTran); //判断判分是否成功 if (flagAddCheckAnswer) //如果都为真,提交 sqlTran.Commit(); return true; //添加成功 else sqlTran.Rollback(); return false; //添加失败 catch(Exception) //出现异常,事物回滚 sqlTran.Rollback(); return false; finally sqlCon.Close(); //sqlCon = null; }
U层用户界面层代码:
span /span DataSet dsCheckAnswer = new DataSet("dt_CheckAnswer"); //手动创建一个名为“dt_CheckAnswer”的DataSet文件 DataTable dtCheckAnswer = new DataTable("dt_CheckAnswer"); //表内建立Column(表头) dtCheckAnswer.Columns.Add(new DataColumn("studentID", typeof(string))); dtCheckAnswer.Columns.Add(new DataColumn("setDateTime", typeof(DateTime))); dtCheckAnswer.Columns.Add(new DataColumn("isAvailable", typeof(string))); dtCheckAnswer.Columns.Add(new DataColumn("multFirst", typeof(string))); dtCheckAnswer.Columns.Add(new DataColumn("multSecond", typeof(string))); dtCheckAnswer.Columns.Add(new DataColumn("multThird", typeof(string))); dtCheckAnswer.Columns.Add(new DataColumn("multFourth", typeof(string)));
#region 一条信息——胡志婷——2016年1月2日08:28:32 if (TextBox1.Text.Trim() != "" TextBox2.Text.Trim() != "" TextBox3.Text.Trim() != "" TextBox4.Text.Trim() != "") { //多选题答案不为空时,写入答案 //添加新行 DataRow drAddEvaluation = dtCheckAnswer.NewRow();//注意这边创建dt的新行的方法。指定类型是DataRow而不是TableRow,然后不用new直接的用创建的DataTable下面的NewRow方法。 //多选题各列值 drAddEvaluation["StudentID"] = "2"; //drAddEvaluation["StudentID"] = Session["StudentID"].ToString(); //学号 drAddEvaluation["setDateTime"] = DateTime.Now; //当前时间 drAddEvaluation["isAvailable"] = "Y"; drAddEvaluation["multFirst"] = TextBox1.Text; //多选第一题 drAddEvaluation["multSecond"] = TextBox2.Text; //多选第二题 drAddEvaluation["multThird"] = TextBox3.Text; //多选第三题 drAddEvaluation["multFourth"] = TextBox4.Text; //多选第四题 dtCheckAnswer.Rows.Add(drAddEvaluation);//将一整条数据写入表中 #endregion #endregion dsCheckAnswer.Tables.Add(dtCheckAnswer);//写入多选题答案
这样,便实现了将学生的多选题答案存入到数据库中。
【项目总结】
这一次开发,其实做的很死板,之前实现了一版将题目和选项从数据库中动态加载出来,但问题是不知道如何将多选题答案取出,因为题目是动态加载的,前台没有ID,没有name,这样的话,ID和name也必须动态生成,这样的效果,强大的逻辑,灵活的代码,我真的无法驾驭。所以到最后,还是选了个取巧的方法,题目不多,直接写在前台了。 因为一个新的需求,也是在这次的考试维护中,接触了整个系统的代码。之前,不论考试还是评教,都觉得系统做的很牛,这一次,看到代码,更想说,系统做的真的很牛。很多东西,都是写的高大上的,我在其他地方并没有见过,更没有遇到。虽然B/S学完了,但很多东西也都没有加以实践,我要学习的还有很多很多,每一个机会,都是需要自己去争取的。
pre span "img" alt="" src="https://ucc.alicdn.com/pic/developer-ecology/2ce982ce531e43f6a331b88f29c58571.png?x-oss-process=image/resize,h_118"/>
相关文章
- asp.net core 阿里云消息服务(Message Service,原MQS)发送接口的实现
- VBA转VB.Net VSTO学习记录-1
- 史上最详细的Windows10系统离线安装.NET Framework 3.5的方法(附离线安装包下载)
- LLDB Debug .Net 7 In Ubunt22.04 for Exception
- 【愚公系列】2023年02月 .NET/C#知识点-数组复制总结
- ASP空间与MSSQL相结合,完美解决网站数据库存储与运行问题(asp空间mssql)
- .net利用MSSQL连接ASP.NET的办法探索(mssql 连接asp)
- ASP.NET中文显示之两种解决方法
- Asp.Net类库中发送电子邮件的代码
- ASP.NET水晶报表打印功能实现代码
- asp.net不用组件的URL重写(适用于较大型项目)
- ASP.NET常用文件上传方法
- asp.net与excel互操作实现代码
- asp页面和Asp.net页面传中文参数UrlEncode编码以及接收解码
- asp.net下用Aspose.Wordsfor.NET动态生成word文档中的数据表格的方法
- asp.net生成Excel并导出下载五种实现方法
- asp.net实现的计算网页下载速度的代码
- 分享下Asp.Net面试题目及答案集合
- Asp.Net获取网站截图的实例代码
- asp.net后台弹窗如何实现
- Asp.Net性能优化技巧汇总
- 实现Asp与Asp.Net共享Session的方法
- asp.net中Timer无刷新定时器的实现方法