恳请思路:如何进行判断?

liang_pei 2009-12-14 06:34:14
这是一个关于调查问卷录入的问题。
在设计问卷时,有如下规则:
1、题目分为单选题、多选题、填空题。每个题目都分为必填、可选。如果题目设置为必选,则录入时,不可为空。
2、对于一道单选题,如果设置为必填,则可以设置“跳转”的答题规则。
例如:


第1题,你最喜欢的运动是:(单选,必填)
A跑步(若选A,则跳转至第2题)
B游泳 (若选B,则跳转至第4题)

第2题:你一般跑步多长时间:(单选,必填)
A20分钟左右 B 30分钟左右


第3题:你一般跑步是在什么时候:(单选,必填)
A 早晨 B傍晚


第4题:你一般游泳会在什么时候:(单选,必填)
A 中午 B 晚上

第5题:你一周运动的时间大概是多长:(单选,必填)
A<2小时 B 2-5小时 C >5小时

……


这份问卷的录入判断应该如下:
1、1题为必答,所以不为空。
2、若1题选A,则答2题、3题、5题……

3、若1题选B,则答4题、5题……
4、同时对于2题、3题进行上述1、2、3步骤的判断。


下面是代码,请问如何在提交答案录入时进行上述规则的判断?请各位朋友稍作指点,感激不尽。



其中显示选项的代码如下:(题目是绑定在rpt_Question上)

protected void rpt_Question_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
string sQN_ID = tb_QNID.Text;
string sQNVersion = tb_QNVersion.Text;
double dQNVersion = double.Parse(sQNVersion);
int iQN_ID = int.Parse(sQN_ID);

CheckBoxList cb = (CheckBoxList)e.Item.FindControl("cb");
cb.RepeatColumns = 4;
cb.CellPadding = 10;
RadioButtonList rb = (RadioButtonList)e.Item.FindControl("rb");
rb.RepeatColumns = 4;
rb.CellPadding = 10;
TextBox tb = (TextBox)e.Item.FindControl("tb");
Repeater rpt = (Repeater)e.Item.FindControl("rpt_Blank");
DataRowView rowv = (DataRowView)e.Item.DataItem;

//提取问题编号和问题类型
string sQN_Order = rowv["Q_ID"].ToString();
string sQN_Type = rowv["T_ID"].ToString();

DataSet ds = new DataSet();
using (OracleConnection conn = new OracleConnection(sConnectionString))
{
conn.Open();
OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
OracleDataAdapter da1 = new OracleDataAdapter("SELECT * FROM Q_OPTION WHERE QN_ID = \'" + iQN_ID + "\' AND QN_VERSION = \'" + dQNVersion + "\' AND Q_ID = \'" + sQN_Order + "\' AND Q_ID_A = '0' ORDER BY O_ORDER", conn);
OracleDataAdapter da2 = new OracleDataAdapter("SELECT * FROM QUESTION WHERE QN_ID = \'" + iQN_ID + "\' AND QN_VERSION = \'" + dQNVersion + "\' AND Q_ID = \'" + sQN_Order + "\' AND Q_ID_A <> '0' ORDER BY Q_ID_A", conn);
da1.Fill(ds, "question");
da2.Fill(ds,"blank");
ds.Tables[0].Columns.Add("IDName", typeof(string), "O_ID + '、' + O_OPtion + '' ");
switch (Convert.ToInt32(sQN_Type))
{
case 1:
rb.Visible = true;
cb.Visible = false;
tb.Visible = false;
rb.DataSource = ds.Tables[0];
rb.DataTextField = "IDName";
rb.DataValueField = "O_ID";
rb.DataBind();
cmd.CommandText = "SELECT O_OPTION FROM Q_OPTION WHERE O_ID = 'a' AND QN_ID = \'" + iQN_ID + "\' AND QN_VERSION = \'" + dQNVersion + "\' AND Q_ID = \'" + sQN_Order + "\' AND Q_ID_A = '0'";
Object oOption = cmd.ExecuteScalar();
if (oOption == null)
{
tb.Visible = false;
}
else
{
tb.Visible = true;
}

break;
case 2:
rb.Visible = false;
cb.Visible = true;
tb.Visible = false;
cb.DataSource = ds.Tables[0];
cb.DataTextField = "IDName";
cb.DataValueField = "O_ID";
cb.DataBind();
cmd.CommandText = "SELECT O_OPTION FROM Q_OPTION WHERE O_ID = 'a' AND QN_ID = \'" + iQN_ID + "\' AND QN_VERSION = \'" + dQNVersion + "\' AND Q_ID = \'" + sQN_Order + "\' AND Q_ID_A = '0'";
Object oOptionM = cmd.ExecuteScalar();
if (oOptionM == null)
{
tb.Visible = false;
}
else
{
tb.Visible = true;
}
break;
case 3:
tb.Visible = false;
rb.Visible = false;
cb.Visible = false;
rpt.Visible = true;
rpt.DataSource = ds.Tables[1];
rpt.DataBind();
break;
}
}




提交代码如下:


protected void btn_Sure_Click(object sender, EventArgs e)
{
//ConfrimRule();
string sQN_ID = tb_QNID.Text;
string sQNVersion = tb_QNVersion.Text;
double dQNVersion = double.Parse(sQNVersion);
int iQN_ID = int.Parse(sQN_ID);

//先把数据写入答卷库
using (OracleConnection conn = new OracleConnection(sConnectionString))
{
conn.Open();
DataSet ds = new DataSet();
using (OracleCommand cmd = new OracleCommand())
{
cmd.Connection = conn;
string s_ID = tb_ID.Text.Trim();//员工编号

//员工编号必须为数据库中编号,不允许为空
OracleDataAdapter da = new OracleDataAdapter("SELECT * FROM QN_USER WHERE U_ID = \'" + s_ID + "\'", conn);
da.Fill(ds, "user");
if (ds.Tables[0].Rows.Count < 1)
{
Response.Write("<script>alert('该调查员不存在,请重新输入!')</script>");
Server.Transfer("FillIn.aspx?QNID=" + sQN_ID + "&QNVersion=" + sQNVersion);
}
else
{
//编号自动生成,按照顺序依次生成
string sMaxID = "";
int iMaxID = 0;
cmd.CommandText = "SELECT max (AS_ID) FROM ANSWER_SHEET WHERE QN_ID = \'" + iQN_ID + "\' AND QN_VERSION = \'" + dQNVersion + "\'";
Object O = cmd.ExecuteScalar();
sMaxID = O.ToString();
if (sMaxID.Length == 0)
iMaxID = 1;
else
{
iMaxID = int.Parse(sMaxID);
iMaxID++;
}
cmd.CommandText = "INSERT INTO ANSWER_SHEET VALUES (\'" + iQN_ID + "\',\'" + dQNVersion + "\',\'" + iMaxID + "\',\'" + s_ID + "\',\'" + Session["UserID"].ToString() + "\',\'" + DateTime.Now.ToString() + "\','','' ,'0','')";
cmd.ExecuteNonQuery();
tb_ASID.Text = iMaxID.ToString();
}
}
}

//把答案写入答卷,基于答题规则的写入

string cb = "";//复选框
string rb = "";//单选框
int i = 1;//题目数量
foreach (RepeaterItem item in this.rpt_Question.Items)
{
CheckBoxList cb1 = (CheckBoxList)item.FindControl("cb");
RadioButtonList rb1 = (RadioButtonList)item.FindControl("rb");
TextBox tb1 = (TextBox)item.FindControl("tb");
Repeater rpt = (Repeater)item.FindControl("rpt_Blank");

using (OracleConnection conn = new OracleConnection(sConnectionString))
{
conn.Open();
OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;

//多选框
if (cb1.Visible == true)
{
string sASID = tb_ASID.Text;
int iASID = int.Parse(sASID);
for (int j = 0; j < cb1.Items.Count; j++)
{
if (cb1.Items[j].Selected == true)
{
cb += cb1.Items[j].Value + ",";
}
}
cmd.CommandText = "INSERT INTO AS_ANSWER VALUES (\'" + iQN_ID + "\',\'" + dQNVersion + "\',\'" + iASID + "\',\'" + i + "\','0',\'" + cb + "\','')";
cmd.ExecuteNonQuery();

}

//单选框
if (rb1.Visible == true)
{
string sASID = tb_ASID.Text;
int iASID = int.Parse(sASID);
for (int j = 0; j < rb1.Items.Count; j++)
{
if (rb1.Items[j].Selected == true)
{
rb = rb1.Items[j].Value;

}
}
cmd.CommandText = "INSERT INTO AS_ANSWER VALUES (\'" + iQN_ID + "\',\'" + dQNVersion + "\',\'" + iASID + "\',\'" + i + "\','0',\'" + rb + "\','')";
cmd.ExecuteNonQuery();
}
if (rpt.Visible == true)
{
string sASID = tb_ASID.Text;
int iASID = int.Parse(sASID);

foreach (RepeaterItem item1 in rpt.Items)
{
Label l = (Label)item1.FindControl("l_AID");
TextBox tb_Blank = (TextBox)item1.FindControl("tb_Blank");
cmd.CommandText = "INSERT INTO AS_ANSWER VALUES (\'" + iQN_ID + "\',\'" + dQNVersion + "\',\'" + iASID + "\',\'" + i + "\',\'" + l.Text.Trim() + "\',\'" + tb_Blank.Text.Trim() + "\','') ";
cmd.ExecuteNonQuery();
}
}
}
i++;
}
//重新打开页面
Response.Redirect("FillIn.aspx?QNID=" + sQN_ID + "&QNVersion=" + sQNVersion);
}
...全文
68 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
shilei831115 2009-12-23
  • 打赏
  • 举报
回复
好好理理需求和思路吧,不行就请教高手解决思路,先不着急动手写代码。这样写会越写越乱,最后连高手都不忍心看完。
angel6709 2009-12-23
  • 打赏
  • 举报
回复
估计被调查的没有人愿意跟你的程序跳转。
单选题、多选题、填空题,
必选时撕票
liang_pei 2009-12-23
  • 打赏
  • 举报
回复
最终实现:把设置了答题规则的checkboxlist的autopostback属性设为true,然后在pageload里面进行控件的enabled属性的控制。
liang_pei 2009-12-14
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lianshaohua 的回复:]
这种复杂的东西不是这么做的,需要建立良好的类/接口/组合关系,否则越做越复杂
[/Quote]
我是新手,复杂的有一定难度,不知道怎么处理
ztenv 2009-12-14
  • 打赏
  • 举报
回复
这种复杂的东西不是这么做的,需要建立良好的类/接口/组合关系,否则越做越复杂

111,120

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧