簡體   English   中英

單選按鈕檢查+ SQL插入

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM