问题很好,实用性很强, 我给你写写我的思路 大家共同进步
首先说说如何生成问卷系统
在数据库见一个表,假如表名叫questions_tb ,表里存放了全部题目,字段大致为 id,题目标题,题目内容,题目类型(单选或多选),用户类型(不同的问卷有不同的用户,默认为空),题目标记选择(0表示没选,1表示选择,生成问卷时用,这里全部是0)
出题目的人生成问卷页面
可以用gridview来显示questions_tb ,但是还要在gridview添加一列checkbox列,用于选择题目,这个是用于和字段题目标记选择来对应的。另外还要有一个textbox或者dropdownlist这个在gridview外的来确定用户类型
生成问卷按钮后台代码这样写
大致如下 foreach (GridViewRow gr in GridView1.Rows)
{
string 用户=DropDownList1.SelectedValue;//获取用户类型
int qid= Convert.ToInt32( GridView1.DataKeys[ gr.RowIndex]);//获取更新行id
if (((CheckBox)gr.FindControl("checkbox1")).Checked == true)
{ 执行更新函数,最好是三层的代码来编写,这里只要写上表现层函数就行了,更新sql字符串为"update questions_tb set 题目标记选择=1,用户类型=用户 where id=qid"}
}
}
这样就循环更新完数据库了,也就生成了问卷
用户填写问卷页面
这个要略微复杂一点,假如问卷有单选和多选两种题型,建议用两个gridview来显示,根据题目类型,题目标记选择,用户类型来执行select语句,这个不难吧,然后在单选题的gridview里加一列RadioButtonList标记A,B,C多选题的gridview里加一列CheckBoxList标记A,B,C,这样用户就可以答题了,问卷提交, 提交到数据库的答案表中,字段可以id,用户名(考试人),单选题所有答案,多选题答案,假如这四个个字段,
方法还是用上面的方法循环遍历gridview,依次累加RadioButtonList的SelectedValue;譬如A,A,B,C,C,A,C依次累加CheckBoxList的SelectedValue不过循环遍历gridview的同时里面也得对CheckBoxList的listitem做循环,因为他是多选的,累加后结果譬如AC,ABC,B,BC...
字符串累加函数只要做个技巧让他们中间个开个逗号就可以了,这个也不难吧。提交的时候insert into 答案(用户名,单选题所有答案,多选题答案)values(,,,)这样基本上就完成了,采用这种建表的思想可以节省数据库资源,假如几万人参与调查,只能将他们的答案写于一个表中。
今天降温天很冷 我来写思路 手冻得通红 一定可以实现你所说的功能的,因为我曾做个类似的项目。
希望能得到你的分 呵呵
可以通过循环页面上的控件,打比方是写在textbox里面 就可以通过循环页面控件,然后判断是否是textbox 如果是则取值
就像百度知道这个页面,你的问题在Panel_A中,所有回复在Panel_B中,此时我实在回复你的问题,我正在Panel_C中写东西.
这3个panel就可以理解成"问题类型"(单选,多选,填空....)
(感觉你不懂数据库,确切的说是数据库设计)
方法一:用户每填写完毕一道题,就自动记录结果.
方法二:循环访问每个Panel中子控件,然后读取"用户填写的结果",记录到数据库.
加载页面时候,要从数据库读取试题,然后根据类型添加到不同的Panel中,如:单选题,放在RadioPanel中,问题的题目用label显示,然后用RadioButton显示选项.
foreach(var control in RadioPanel.Children)
RadioButton radio = control as RadioButton;
//...
第二个方法是你希望的,可是这个需要的数据库设计,
不用全部写入数据库,因为你已经知道答案.
只需要把答案用固定的比如x或Y来代表答案写入数据库.
当然在读出的时候当你读到X的时候你在显示的时候转化为答案就行了.