Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 单选按钮检查+;SQL插入_C#_Sql Server_Wpf_Xaml_Radio Button - Fatal编程技术网

C# 单选按钮检查+;SQL插入

C# 单选按钮检查+;SQL插入,c#,sql-server,wpf,xaml,radio-button,C#,Sql Server,Wpf,Xaml,Radio Button,我的表格上有几个问题,要么是可接受的,要么是链接到单选按钮的不可接受的选项。我遇到的问题是,我的检查事件在我检查时触发一次,在我取消选中时再次触发,我不确定如何修改我的代码,以便每个问题答案只触发一次,这是实现我正在做的事情并将答案插入SQL的正确方法吗?因为它与触发两次的事件是半工作的: string answer1 = "Acceptable"; string answer2 = "Not Acceptable"; string n1; string n2; string n3; stri

我的表格上有几个问题,要么是可接受的,要么是链接到单选按钮的不可接受的选项。我遇到的问题是,我的检查事件在我检查时触发一次,在我取消选中时再次触发,我不确定如何修改我的代码,以便每个问题答案只触发一次,这是实现我正在做的事情并将答案插入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"/>
好的

想象你检查你的第一个单选按钮。之后,您将检查第二个。对于第一个单选按钮,函数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...
         }
    }
作为更清晰编码的提示: 不需要将返回的布尔值与“真”或“假”进行比较

而不是这个

if(radioButton.IsChecked == true)
最好走这条路来比较真实

if(radioButton.IsChecked)
或者像这样比较虚假

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


如果您希望继续使用代码:


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

无法真正实现您的目标。所以有些问题每个问题有多个单选按钮?当一个答案被选中时,它应该被激活吗?当一个答案被切换时,它必须再次启动吗?甚至可以转换答案吗?或者您打算通过按钮或其他方式一次性提交所有答案?@C4ud3x每个问题有两个选项,可接受或不可接受。问题1将插入数据库的第一列,问题2将插入第二列等。用户将进行所有选择,然后单击提交,将插入数据库。我注意到它发射了两次,因为我在1a/2a单选按钮上附加了一个消息框,每次我切换到不同的选项时,它们都会出现两次。当我更改选择时,事件将再次触发,当我选中并取消选中不应该发生的事件时。如果你选中一个答案,事件将触发两次?顺便说一下:从if中删除“==true”。“IsChecked”已经返回一个布尔值,所以if(radio.IsChecked)就足够了。对于false,只需使用if(!radio.IsChecked)。答案很好,我最初确实考虑过使用它,但不确定如何以这种方式使用它。无论如何,开关箱正是我所需要的,现在事件正确启动,谢谢!很高兴我能帮上忙,伙计。
if(!radioButton.IsChecked)