如何将选定的事件添加到数百个单选按钮

时间:2018-11-02 03:25:48

标签: c# wpf

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;

1 个答案:

答案 0 :(得分:1)

这里的问题是您有许多几乎个相同的事件处理程序,唯一的区别是控件的ID,即下一行的a131 / b131以及a141 / b141。

由于行(左侧各有5个RadioButtons,右侧各有5个),您可以为行定义一个UserControl

因此,无需拥有许多几乎相同的事件处理程序,而只需在UserControl中定义一个事件处理程序即可。

对于您在SQL命令中使用的id值,我想您正在使用它来指示单击了哪一行。您可以为每个UserControl的Tag属性设置id值,以便可以从事件处理程序中访问id值。