[英]Radio Buttons Check + SQL Insert
我在表單上有幾個問題,這些問題是與單選按鈕鏈接的可接受或不可接受的選項。 我遇到的問題是我的檢查事件在我檢查時觸發一次,在我取消選中時再次觸發,我不確定如何修改我的代碼,以便每個問題回答僅觸發一次,這是正確的方法嗎?實現我在做什么,並將答案插入SQL中,因為它與兩次觸發的事件分開工作:
string answer1 = "Acceptable";
string answer2 = "Not Acceptable";
string n1;
string n2;
string n3;
string n4;
private void btnSubmit_Click(object sender, RoutedEventArgs e)
{
SqlConnection conDatabase = new SqlConnection(String.Format(@"Data Source={0};Initial Catalog={1};Persist Security Info=True;User ID={2};Password={3}", SQLSERVER_ID, SQLDatabaseName, SQLServerLoginName, SQLServerPassword));
string query = "INSERT INTO Answers(Option1, Option2, Option3, Option4) VALUES (@Option1, @Option2, @Option3, @Option4";
SqlCommand cmd = new SqlCommand(query, conDatabase);
cmd.CommandType = CommandType.Text;
conDatabase.Open();
cmd.Parameters.Add("@Option1", SqlDbType.NVarChar).Value = n1;
cmd.Parameters.Add("@Option2", SqlDbType.NVarChar).Value = n2;
cmd.Parameters.Add("@Option3", SqlDbType.NVarChar).Value = n3;
cmd.Parameters.Add("@Option4", SqlDbType.NVarChar).Value = n4;
cmd.ExecuteNonQuery();
conDatabase.Close();
}
我的xaml代碼是:
<RadioButton x:Name="radio1a" GroupName="Question1" Checked="radioButton1_Checked"/>
<RadioButton x:Name="radio1b" GroupName="Question1" Unchecked="radioButton2_Checked"/>
<RadioButton x:Name="radio2a" GroupName="Question2" Checked="radioButton1_Checked"/>
<RadioButton x:Name="radio2b" GroupName="Question2" Unchecked="radioButton2_Checked"/>
最后,我要檢查的是是否單擊了單選按鈕1,然后將“ n1”設置為答案1(可接受);如果單擊了單選按鈕2,將“ n1”設置為答案2(不可接受)-n1為數字1 (我表格上的第一個問題):
private void radioButton1_Checked(object sender, RoutedEventArgs e)
{
Check();
}
private void radioButton2_Checked(object sender, RoutedEventArgs e)
{
Check();
}
public void Check()
{
if (radio1a.IsChecked == true)
{
n1 = answer1;
}
else if (radio1b.IsChecked == true)
{
n1 = answer2;
}
if (radio2a.IsChecked == true)
{
n2 = answer1;
}
else if (radio2b.IsChecked == true)
{
n2 = answer2;
}
.... etc.
}
好的。
想象一下,您檢查了第一個單選按鈕。 之后,您要檢查第二個。 您的函數check()對於第一個單選按鈕仍然為true,因為它仍處於選中狀態!
按照這種方式進行操作:如果選中radioButton1或2,則獲取按鈕的名稱。 將此按鈕名稱傳遞給您的check()函數並進行切換。 這樣,它只會為選中的單選按鈕觸發,也不會為所有選中的按鈕觸發。
private void radioButton1_Checked(object sender, RoutedEventArgs e)
{
var radioFired = (RadioButton)sender;
Check(radioFired.Name);
}
private void radioButton2_Checked(object sender, RoutedEventArgs e)
{
var radioFired = (RadioButton)sender;
Check(radioFired.Name);
}
public void Check(string radioName)
{
switch(radioName)
{
case "radio1a":
n1 = answer1;
break;
case "radio1b":
n1 = answer2;
break;
etc...
}
}
作為更簡潔編碼的提示:無需將返回的布爾值與“ true”或“ false”進行比較。
代替這個
if(radioButton.IsChecked == true)
最好用這種方式比較真實。
if(radioButton.IsChecked)
或像這樣比較假。
if(!radioButton.IsChecked)
如果選中,則“ radioButton.IsChecked”為true。 如果值為true,則將執行您的代碼。 就像編寫if(true)一樣,它也會被執行。
如果您想保留您的代碼:
刪除了這部分。 沒有工作。 最好把我的解決方案放在上面。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.