Best way to databind a group of radiobuttons in WinForms

前端 未结 9 553
无人共我
无人共我 2020-12-03 00:58

I\'m currently working on databinding some of my existing Windows Forms, and I\'ve ran into an issue figuring out the proper way of databinding a group of radiobutton contro

9条回答
  •  一生所求
    2020-12-03 01:52

    I would like to make an observation about the code block that might be helpful to people reading these posts. The following code may not always work as expected due to it's structure.

    try
        {
          val = System.Enum.Parse(this.enumType, rb.Text) as System.Enum;
        }
        catch(Exception ex)
        {
          // cannot occurred if code is safe
          System.Windows.Forms.MessageBox.Show("No enum value for this radio button : " + ex.ToString());
        }
        object obj = this.bindingSource.Current;
        obj.GetType().GetProperty(propertyName).SetValue(obj, val, new object[] {
        }
      );
      this.bindingSource.CurrencyManager.Refresh();
    

    If an error occurs in the try block, the catch block will be executed. The code will continue to execute after the catch block. Since there was no handling of binding source, the variables following the catch could end up in a indeterminate state and may throw another exception that may or may not be handled.

    A better approach is as follows

     try
            {
                val = System.Enum.Parse(this.enumType, rb.Text) as System.Enum;
    
            object obj = this.bindingSource.Current;
            obj.GetType().GetProperty(propertyName).SetValue(obj, val, new object[] { });
            this.bindingSource.CurrencyManager.Refresh();
            }
            catch(EntityException ex)
            {
                // handle error
            }
            catch(Exception ex)
            {
                // cannot occurred if code is safe
                System.Windows.Forms.MessageBox.Show("No enum value for this radio button : " + ex.ToString());
            }
    

    This allows the enum value error to be handled as well as other errors that may occur. However use the EntityException or variations of it before the Exception block (all decendents of Exception have to come first). One can get specific entity state information for a entity framework error by using the entity framework classes instead of the Exception base class. This can be helpful for debugging or providing clearer run time messages for the user.

    When I setup try-catch blocks I like to view it as a "layer" on top of the code. I make decisions about the flow of the exceptions through out the program, their display to the user, and what ever cleanup is required to allow the program to continue working properly without objects in a indeterminate state that can cascade to other errors.

提交回复
热议问题