2014-01-13 92 views
0

這種新的,所以你知道。如果聲明與SQL

我正在爲一個學校項目製作一個測驗製作者,當您進行測驗時,您可以選擇是否想要多一個正確答案。如果它不止一個,答案選項應該是複選框或其他Radibuttons中的項目。

correctAnswer有點保存在SQL中。

所以我想要做的就是這樣的事情,但如果有任何方式說「如果它是超過一個真正的答案使用複選框」:

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(); 
} 
+3

我迷路約在這裏你的代碼:'如果( 「correctAnswer」 ==真)'。你不是在發問嗎? 'correctAnswer'與它有什麼關係(除了你想要計算它有多少?) – 2014-01-13 15:00:29

回答

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! 
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 . 
     }  

    } 
    } 
+0

關閉,但是(他)沒有限制在查詢中只糾正答案。你必須計算有多少'correctAnswer'。 – 2014-01-13 15:00:10

0

一旦你填充你的數據集,使用linq查詢它,看看有多少正確的答案。如果它是1,則使用單選按鈕。如果它超過1,請使用複選框。如果它是0,則不顯示該問題。

1

我會做之前。你將不得不在某處找到問題。

SELECT * FROM question WHERE [email protected] 

替換與

SELECT *,(SELECT COUNT(Id) FROM answer WHERE correctAnswer=1 AND IdQuestion=question.Id) FROM question WHERE [email protected] 

,然後你必須包含你的問題是否具有多個正確答案還是不是你的行中的另一個元素。沒有花哨的查詢

+0

可能很好地命名擴展的術語。把它放在'select *'後面(你似乎在推薦),會讓它很難知道它有哪個列號。 – 2014-01-13 15:22:34