单选按钮检查+SQL插入

本文关键字:插入 +SQL 检查 单选按钮 | 更新日期: 2023-09-27 18:24:54

我的表单上有几个问题,其中包含一个可接受或不可接受的选项,该选项链接到一个单选按钮。我遇到的问题是,我的check事件在我选中时触发一次,在我取消选中时再次触发,我不确定如何修改我的代码,使其每个问题答案只触发一次。这是否是实现我正在做的事情并将答案插入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.
}

单选按钮检查+SQL插入

好的。

想象一下,你检查了你的第一个单选按钮。之后你要检查第二个。您的函数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)

或者像这样用来与false进行比较。。

if(!radioButton.IsChecked)

如果选中,则"radioButton.IsChecked"为true。如果该值为true,则代码将被执行。这就像写if(true)一样,它也会被执行。


如果您想继续使用您的代码:

删除了此部分。没有工作。最好采用我上面的解决方案