单选按钮检查+ SQL插入

时间:2014-09-29 13:24:07

标签: c# sql-server wpf xaml radio-button

我的表单上有几个问题,其中包含可接受或不可接受的选项,该选项与单选按钮相关联。我遇到的问题是,当我取消选中时,当我检查并再次触发时,我的检查事件会触发一次,我不确定如何修改我的代码,以便每个问题答案只触发一次,这是正确的方法吗实现我正在做的事情并将答案插入到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然后&#39; n1&#39;将设置为answer1(可接受),如果点击了不可接受的单选按钮2,那么&#39; n1&#39;将设置为answer2(不可接受) - 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.
}

1 个答案:

答案 0 :(得分:1)

好的。

想象一下,你检查你的第一个单选按钮。之后你正在检查第二个。您的函数 check()对于第一个单选按钮仍然是正确的,因为它仍然被检查!

这样:如果选中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,则代码将被执行。它就像写if(true)将被执行一样。


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

删除了这部分内容。没工作。最好采取我的解决方案。