单选按钮检查+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.
}
好的。
想象一下,你检查了你的第一个单选按钮。之后你要检查第二个。您的函数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)一样,它也会被执行。
如果您想继续使用您的代码:
删除了此部分。没有工作。最好采用我上面的解决方案