Sri
Sri

Reputation: 2273

how to set visible true/false based on value in c# code behind

I have a list of input controls like Date selector, Select box, textbox, checkbox. I want to set visible true and false based on the type user selects.

I have tried the below is working but just wonder if I can make this Dry and make efficient calling from a single function or something. Any advice would be much appreciated.

Please ignore the naming of the text boxes or anything as this is just for an example.

if (attribute_type == "T") { 
  Value1_tbx.Visible = true; // this is true
  Value1_tbx.Text = some_text_value;  // and set some value
  Value_ddl.Visible = false; 
  Value_Date_tbx.Visible = false;
  Value_Date_calendar_img.Visible = false;
  Value_rbl.Visible = false;
} else if (attribute_type == "S") {
  Value1_tbx.Visible = false;
  Value_ddl.Visible = true; // this is true
  Value_ddl.Text = some_select_box_value; // and set some value
  Value_Date_tbx.Visible = false;
  Value_Date_calendar_img.Visible = false;
  Value_rbl.Visible = false;
} else if (attribute_type == 'D') {
  Value1_tbx.Visible = false;
  Value_ddl.Visible = false;
  Value_Date_tbx.Visible = true; // this is true
  Value_Date_calendar_img.Visible = true; // calendar icon should be visible
  Value_Date_tbx.Text = some_date_value; // and set some value
  Value_rbl.Visible = false;
} else if (attribute_type == 'R') {
  Value1_tbx.Visible = false;
  Value_ddl.Visible = false;
  Value_Date_tbx.Visible = false;
  Value_Date_calendar_img.Visible = false;
  Value_rbl.Visible = true; // this is true
  Value.rbl.Text = some_value; // and set some value
};

Upvotes: 0

Views: 2737

Answers (2)

Ryan
Ryan

Reputation: 133

In the comments of my other answer, I said if you were to write a single function you'd need to perform the checks still. However, you could write multiple individual functions that set the values of your controls. Doing this would alleviate having to perform the checks, but it would require more code.

Create your functions:

public void SetTControls()
{
     Value1_tbx.Visible = true;
     Value1_tbx.Text = some_text_value;
     Value_ddl.Visible = false; 
     Value_Date_tbx.Visible = false;
     Value_Date_calendar_img.Visible = false;
     Value_rbl.Visible = false;
}

public void SetSControls()
{
    Value1_tbx.Visible = false;
    Value_ddl.Visible = true;
    Value_ddl.Text = some_select_box_value;
    Value_Date_tbx.Visible = false;
    Value_Date_calendar_img.Visible = false;
    Value_rbl.Visible = false;
}

public void SetDControls()
{
    Value1_tbx.Visible = false;
    Value_ddl.Visible = false;
    Value_Date_tbx.Visible = true;
    Value_Date_calendar_img.Visible = true;
    Value_Date_tbx.Text = some_date_value;
    Value_rbl.Visible = false;
}

public void SetRControls()
{
    Value1_tbx.Visible = false;
    Value_ddl.Visible = false;
    Value_Date_tbx.Visible = false;
    Value_Date_calendar_img.Visible = false;
    Value_rbl.Visible = true;
    Value.rbl.Text = some_value;
}

Then you could clean up your if/else statement like this:

if (attribute_type == 'T')
    SetTControls(); 
else if (attribute_type == 'S')
    SetSControls();
else if (attribute_type == 'D')
    SetDControls();
else if (attribute_type == 'R')
    SetRControls();

As I said, it requires more code, but definitely cleans up your if/else statement. Hope this helps!

Upvotes: 1

Ryan
Ryan

Reputation: 133

If some of the values of your controls you're setting are the same based on the value of attribute_type, you could use a switch statement.

So for example if Value_ddl.Visible = false when attribute_type == 'S' or attribute_type == 'D', you could do something like this:

switch(attribute_type)
{
     case 'S':
     case 'D':
          Value_ddl.Visible = false;
          break;
     default:
          //default stuff
          break;
}

It might save some space in your code and make it more readable.

Upvotes: 0

Related Questions