随机考试主要有两个关键技术:
1是保证考题的随机性和不确定性 2是防止随机抽取出现重复考题
ASP.NET2.0使用System.Random类来产生随机数
Random rom=new Random();
Random有很多方法适用于产生随机数,并且可以指定这些数的范围,如下面将产生一个大于50小于60的随机数
int i=rom.Next(50,60);
double d=rom.NextDouble(); 可以产生一个范围在0.0-1.0之间的双精度浮点数。
以上是在程序中产生随机数,要在数据库中实现随机选取记录,这里提供两种方法:
①先在程序中用Random产生5个随机数,然后select 字段 from 表名 where 字段ID in (产生的5个随机数);
使用这种方法是有可能取到相同的随机数的,处理方法是将取到的随机数存到一个数组,然后每随机取一个值就遍历这个数组与其里面的值对比,如果重复,再重新抽取。
②使用SQLServer数据库函数newid() 该函数不会产生重复的记录
select top 10 字段 from 表名 order by newid();
具体看wenbhappy的博客
单选题表Radio,如下图:
添加单选题目使用了LINQ,如下图:
显示测试题目用了DataList控件,如下图:
在后置代码中声明了protected int count=0;用于显示第几题。
在DataList绑定数据时就将抽到题目的答案取出放在ArrayList里,以备后来核对答案,如下图:
在ItemDataBound事件执行时,先要判断当前行的类型,只有是数据行才能取出其内数据。
e.Item获取到的就是当前行。
行视图DataRowView是表视图DataView的一行,更多关于视图看meceky的博客
有可能遇到的问题--sk-net的博客
单击提交时核对答案,如下图:
其中DataList1.Items.Count只包括<ItemTemplate>中项的数量,而DataList1.Controls包括所有<*Template>中的项,在这里由于加一个<HeaderTemplate>,所以要获得ItemTemplate中的控件,索引要从1开始:
DataList1.Controls[i+1].FindControl()。
DataList的Items可以获得所有数据项的集合即ItemTemplate (ItemTemplate及其内的控件会不断动态生成直至其内绑定数据结束) 所以也可以如下代码那样写:
给DataList分页请看benon的博客