enter image description here 如图所示,每五个单选按钮都放置在一个堆栈面板中。我想要实现的是,单击单选按钮时,所选raduibutton上的数字将按顺序存储在数据库中。如果有成千上万个单选按钮,那么一个接一个地添加事件效率很低。我该如何快速做到这一点?
<StackPanel Orientation="Horizontal" Grid.Column="2" Grid.Row="1">
<RadioButton Grid.Column="2" Margin="0,0,10,0" Style="{StaticResource radBase}" Grid.Row="1" VerticalAlignment="Center" Name="a131"/>
<RadioButton Grid.Column="2" Margin="0,0,10,0" Style="{StaticResource radBase2}" Grid.Row="1" VerticalAlignment="Center" Name="a132"/>
<RadioButton Grid.Column="2" Margin="0,0,10,0" Style="{StaticResource radBase3}" Grid.Row="1" VerticalAlignment="Center" Name="a133"/>
<RadioButton Grid.Column="2" Margin="0,0,10,0" Style="{StaticResource radBase4}" Grid.Row="1" VerticalAlignment="Center" Name="a134"/>
<RadioButton Grid.Column="2" Margin="0,0,10,0" Style="{StaticResource radBase5}" Grid.Row="1" VerticalAlignment="Center" Name="a135"/>
</StackPanel>
<StackPanel Orientation="Horizontal" Grid.Column="3" Grid.Row="1">
<RadioButton Grid.Column="2" Margin="0,0,10,0" Style="{StaticResource radBase}" Grid.Row="1" VerticalAlignment="Center" Name="b131"/>
<RadioButton Grid.Column="2" Margin="0,0,10,0" Style="{StaticResource radBase2}" Grid.Row="1" VerticalAlignment="Center" Name="b132"/>
<RadioButton Grid.Column="2" Margin="0,0,10,0" Style="{StaticResource radBase3}" Grid.Row="1" VerticalAlignment="Center" Name="b133"/>
<RadioButton Grid.Column="2" Margin="0,0,10,0" Style="{StaticResource radBase4}" Grid.Row="1" VerticalAlignment="Center" Name="b134"/>
<RadioButton Grid.Column="2" Margin="0,0,10,0" Style="{StaticResource radBase5}" Grid.Row="1" VerticalAlignment="Center" Name="b135"/>
</StackPanel>
if (a131.IsChecked == true) { all1 += "1"; }
if (a132.IsChecked == true) { all1 += "2"; }
if (a133.IsChecked == true) { all1 += "3"; }
if (a134.IsChecked == true) { all1 += "4"; }
if (a135.IsChecked == true) { all1 += "5"; }
MySqlCommand cmd = new MySqlCommand();
cmd.CommandText = "insert into fu(id,zuofen,youfen)values(@id,@left,@right)";
cmd.Connection = conn;
cmd.Parameters.Add("@id", MySqlDbType.Int64);
cmd.Parameters.Add("@left", MySqlDbType.VarChar, 50);
cmd.Parameters.Add("@right", MySqlDbType.VarChar, 50);
cmd.Parameters["@id"].Value = bb;
cmd.Parameters["@left"].Value = all1;
cmd.Parameters["@right"].Value = all2;
答案 0 :(得分:1)
这里的问题是您有许多几乎个相同的事件处理程序,唯一的区别是控件的ID,即下一行的a131 / b131以及a141 / b141。
由于行(左侧各有5个RadioButtons
,右侧各有5个),您可以为行定义一个UserControl
。
因此,无需拥有许多几乎相同的事件处理程序,而只需在UserControl
中定义一个事件处理程序即可。
对于您在SQL命令中使用的id值,我想您正在使用它来指示单击了哪一行。您可以为每个UserControl的Tag属性设置id值,以便可以从事件处理程序中访问id值。