有点新鲜,所以你知道。
我正在为一个学校项目制作一个测验制作者,当你进行测验时,你可以选择是否需要一个正确答案。如果它不止一个,答案选项应该是复选框中的项目,否则Radiobuttons。
correctAnswer在SQL中有点保存。
所以我想要做的就是这样的事情,但如果有任何方式可以说“如果它更多,那么使用CheckBox就是一个真正的答案”:
var command2 = new SqlCommand("SELECT * FROM Answer WHERE IdQuestion = @Id", connection);
command2.Parameters.AddWithValue("@Id", questionid);
var dataSet = new DataSet();
var adapter = new SqlDataAdapter(command2);
adapter.Fill(dataSet);
if("correctAnswer" == True)
{
RadioButtonList.DataSource = dataSet;
RadioButtonList.DataTextField = "Answer";
RadioButtonList.DataValueField = "Id";
RadioButtonList.DataBind();
}
else
{
CheckBoxList.DataSource = dataSet;
CheckBoxList.DataTextField = "Answer";
CheckBoxList.DataValueField = "Id";
CheckBoxList.DataBind();
}
答案 0 :(得分:1)
我之前会这样做。你必须在某处获取问题。
SELECT * FROM question WHERE Id=@Id
将其替换为
SELECT *,(SELECT COUNT(Id) FROM answer WHERE correctAnswer=1 AND IdQuestion=question.Id) FROM question WHERE Id=@Id
然后你的行中有另一个元素,其中包含你的问题是否有多个正确的答案。
答案 1 :(得分:0)
您可以计算数据集中的行数,以检查它是否包含多个正确答案,但是ebyrob
我也在If("correctAnswer" == True)
丢失,您需要获得正确的答案然后数数吧。
if(ds !=Null)
{
if(ds.tables[0].Rows.Count>0)
{
if(ds.tables[0].Rows.Count>1)
{
//multiple answer question go for CheckBoxList
}
else
{
// Single correct answer .
}
}
}
答案 2 :(得分:0)
填充数据集后,使用linq查询数据集以查看有多少正确答案。如果是1,请使用单选按钮。如果它超过1,请使用复选框。如果为0,则不显示问题。
答案 3 :(得分:0)
常规C#解决方案没有花哨的查询:
int nCorrect = 0;
foreach(DataRow row in ds.Tables[0].Rows)
if (Convert.ToBoolean(row["correctAnswer"]) == true)
++nCorrect;
if( nCorrect > 1 )
//checkbox
else
//radiobutton
可能的LINQ解决方案:
int nCorrect = ds.Tables[0].AsEnumerable().Sum(
r => r.Field<bool>("correctAnswer") == true ? 1 : 0
); // ick!