tags:

views:

2719

answers:

2

I have a small problem. I have a set of ComboBox's that are bound to lists which are associated with a set of dictionaries that provide int values for a math equation. I need to filter the result of cb_test_2 based on the selection of cb_test_1. I think I am close. What happens when I change the value in cb_test_1 it applies the correct list as a data bind to the ComboBox however, it doubles it, placing the list in the ComboBox twice. I cant seem to find what in my code is causing this. Please have a look. I welcome any help and or criticism.

namespace Break
{
partial class MainForm
{
 double x, y, z;  

 System.Collections.Generic.List<string> cable_size0;
 System.Collections.Generic.List<string> cable_size1;
 //System.Collections.Generic.List<string> cable_size2;
 //System.Collections.Generic.List<string> cable_size3;
 //List<string> cable_size4;
 //List<string> cable_size5;
 //List<string> cable_size6;
 //List<string> cable_size7;
 //List<string> cable_size8;
 //List<string> cable_size9;
 //List<string> cable_size10;  
 System.Collections.Generic.List<string> system_type_list;
 System.Collections.Generic.List<string> amperage;

 System.Collections.Generic.Dictionary<string, double> cable_dictionary_0;
 System.Collections.Generic.Dictionary<string, double> cable_dictionary_1;

 System.Collections.Generic.Dictionary<string, double> system_type;
 System.Collections.Generic.Dictionary<string, double> amperage_dictionary;

private void MainFormLoad(object sender, EventArgs e)
 {
   //Each of the following lists populate the ComboBoxes
   //to be selected on the main form.
   amperage = new List<string>();
   system_type_list = new List<string>();
   //Filter
   cable_size0 = new List<string>();
   cable_size1 = new List<string>();
   //cable_size2 = new List<string>();
   //cable_size3 = new List<string>();
   //cable_size4 = new List<string>();
   //cable_size5 = new List<string>();
   //cable_size6 = new List<string>();
   //cable_size7 = new List<string>();
   //cable_size8 = new List<string>();
   //cable_size9 = new List<string>();
   //cable_size10 = new List<string>();


   system_type = new Dictionary<string, double>();
   amperage_dictionary = new Dictionary<string, double>();
   //Filter
   cable_dictionary_0 = new Dictionary<string, double>();
   cable_dictionary_1 = new Dictionary<string, double>();
   //cable_dictionary_2 = new Dictionary<string, double>();
   //cable_dictionary_3 = new Dictionary<string, double>();
   //cable_dictionary_4 = new Dictionary<string, double>();
   //cable_dictionary_5 = new Dictionary<string, double>();
   //cable_dictionary_6 = new Dictionary<string, double>();
   //cable_dictionary_7 = new Dictionary<string, double>();
   //cable_dictionary_8 = new Dictionary<string, double>();
   //cable_dictionary_9 = new Dictionary<string, double>();
   //cable_dictionary_10 = new Dictionary<string, double>();

   //
   InitializeCurrentLoadCB();
   InitializeSystemTypeCB();
   //Cable size filter
   if ((cb_test_1.SelectedIndex==0)||
       (cb_test_1.SelectedIndex==1)||
       (cb_test_1.SelectedIndex==2)||
       (cb_test_1.SelectedIndex==3))
   {
    InitializeCableSizeCB0();
    InitializeCableLookup0();
   }

   //InitializeCableSizeCB2();
   //InitializeCableSizeCB3();
   //InitializeCableSizeCB4();
   //InitializeCableSizeCB5();
   //InitializeCableSizeCB6();
   //InitializeCableSizeCB7();
   //InitializeCableSizeCB8();
   //InitializeCableSizeCB9();
   //InitializeCableSizeCB10();


   //---------------Dictionaries---------------------------------------------------------
   InitializeSystemTypeLookup();
   InitializeAmperageLookup();
   //Cable Size Filter


   //InitializeCableLookup2();
   //InitializeCableLookup3();
   //InitializeCableLookup4();
   //InitializeCableLookup5();
   //InitializeCableLookup6();
   //InitializeCableLookup7();
   //InitializeCableLookup8();
   //InitializeCableLookup9();
   //InitializeCableLookup10();

 }

 private void Cb_test_1SelectedIndexChanged(object sender, EventArgs e)
 {
  if ((cb_test_1.SelectedIndex==0)||
       (cb_test_1.SelectedIndex==1)||
       (cb_test_1.SelectedIndex==2)||
       (cb_test_1.SelectedIndex==3))
   {
    InitializeCableSizeCB1();     
   }
 }


 private void InitializeCurrentLoadCB()
 {
   //Amperage List, No Exclusions-----------------------------------------------------------

   amperage.Add("Please Select Amperage");
   amperage.Add("400");
   amperage.Add("800");
   amperage.Add("1000");
   amperage.Add("1200");
   amperage.Add("1600");
   amperage.Add("2000");
   amperage.Add("2500");
   amperage.Add("3000");
   amperage.Add("3200");
   amperage.Add("4000");
   amperage.Add("5000");
   amperage.Add("6000");

   cb_test_1.DataSource = amperage;
   cb_test_1.SelectedIndex = 0;
   cb_test_1.DropDownStyle = ComboBoxStyle.DropDownList;
 }

 private void InitializeCableSizeCB0()
 {   
   //Cable List, No Exclusions --------------------------------------------------------------
   cable_size0.Add("Please Select Cable Size");
   cable_size0.Add ("#1");
   cable_size0.Add ("1/0");
   cable_size0.Add ("2/0");
   cable_size0.Add ("3/0");
   cable_size0.Add ("4/0");
   cable_size0.Add ("250");
   cable_size0.Add ("300");
   cable_size0.Add ("400");
   cable_size0.Add ("500");
   cable_size0.Add ("600");
   cable_size0.Add ("700");
   cable_size0.Add ("750");

   cb_test_2.DataSource = cable_size0;
   cb_test_2.SelectedIndex = 0;
   cb_test_2.DropDownStyle = ComboBoxStyle.DropDownList;
   //Initial DataBind for cable size ComboBox   
 }

 private void InitializeCableSizeCB1()
 {   
   //Cable List, No Exclusions --------------------------------------------------------------
   cable_size1.Add("Please Select Cable Size");
   cable_size1.Add ("#1");
   cable_size1.Add ("1/0");
   cable_size1.Add ("2/0");
   cable_size1.Add ("3/0");
   cable_size1.Add ("4/0");
   cable_size1.Add ("250");
   cable_size1.Add ("300");
   cable_size1.Add ("400");
   cable_size1.Add ("500");

   cb_test_2.DataSource = cable_size1;
   cb_test_2.SelectedIndex = 0;
   cb_test_2.DropDownStyle = ComboBoxStyle.DropDownList;
   //Initial DataBind for cable size ComboBox   
 }

 private void InitializeSystemTypeCB()
 {
   //System Type List 

   system_type_list.Add("Select System Type");
   system_type_list.Add("3 Phase 3 Wire");
   system_type_list.Add("3 Phase 4 Wire");

   cb_test_3.DataSource = system_type_list;
   cb_test_3.SelectedIndex = 0;
   cb_test_3.DropDownStyle = ComboBoxStyle.DropDownList;
   //Initial DataBind for cb_system type ComboBox    
 }


 private void Button1Click(object sender, System.EventArgs e)
 { 

  if (!String.IsNullOrEmpty(cb_test_1.Text) &&
     (!String.IsNullOrEmpty(cb_test_2.Text) && 
     (!String.IsNullOrEmpty(cb_test_3.Text))))
   { 
    double a;
    if (cb_test_1.SelectedIndex != 0)
     {
      x = amperage_dictionary[amperage[cb_test_1.SelectedIndex]];     
     }              

    if (cb_test_2.SelectedIndex != 0)
     {
      y = cable_dictionary_0[cable_size0[cb_test_2.SelectedIndex]];     
     } 

    if (cb_test_3.SelectedIndex != 0)
     {
      z = system_type[system_type_list[cb_test_3.SelectedIndex]];
     }   

    a = ((x / y)*z);
    this.tb_1.Text = Math.Round(a,2).ToString();

   }

 }
 private void InitializeSystemTypeLookup()
 {
  //System Type Dictionary

  this.system_type.Add(this.system_type_list[0], 0);
  this.system_type.Add(this.system_type_list[1], 3);
  this.system_type.Add(this.system_type_list[2], 4);
 }

 private void InitializeAmperageLookup()
 {
  //Amperage Dictionary 

  this.amperage_dictionary.Add(this.amperage[0], 0);
  this.amperage_dictionary.Add(this.amperage[1], 400);
  this.amperage_dictionary.Add(this.amperage[2], 800);
  this.amperage_dictionary.Add(this.amperage[3], 1000);
  this.amperage_dictionary.Add(this.amperage[4], 1200);
  this.amperage_dictionary.Add(this.amperage[5], 1600);
  this.amperage_dictionary.Add(this.amperage[6], 2000);
  this.amperage_dictionary.Add(this.amperage[7], 2500);
  this.amperage_dictionary.Add(this.amperage[8], 3000);
  this.amperage_dictionary.Add(this.amperage[9], 3200);
  this.amperage_dictionary.Add(this.amperage[10], 4000);
  this.amperage_dictionary.Add(this.amperage[11], 5000);
  this.amperage_dictionary.Add(this.amperage[12], 6000);  
 }

 private void InitializeCableLookup0()
 {
  //Cable Dictionary 0 used for cable quantity calculation
  this.cable_dictionary_0.Add (this.cable_size0[0], 0);
  this.cable_dictionary_0.Add (this.cable_size0[1], 130);
  this.cable_dictionary_0.Add (this.cable_size0[2], 150);
  this.cable_dictionary_0.Add (this.cable_size0[3], 175);
  this.cable_dictionary_0.Add (this.cable_size0[4], 200);
  this.cable_dictionary_0.Add (this.cable_size0[5], 230);
  this.cable_dictionary_0.Add (this.cable_size0[6], 255);
  this.cable_dictionary_0.Add (this.cable_size0[7], 285);
  this.cable_dictionary_0.Add (this.cable_size0[8], 355);
  this.cable_dictionary_0.Add (this.cable_size0[9], 380);
  this.cable_dictionary_0.Add (this.cable_size0[10], 720);
  this.cable_dictionary_0.Add (this.cable_size0[11], 475);
 }

private void InitializeCableLookup1()
 {
  //Cable Dictionary 1 used for cable quantity calculation   
  this.cable_dictionary_1.Add (this.cable_size1[0], 0);
  this.cable_dictionary_1.Add (this.cable_size1[1], 130);
  this.cable_dictionary_1.Add (this.cable_size1[2], 150);
  this.cable_dictionary_1.Add (this.cable_size1[3], 175);
  this.cable_dictionary_1.Add (this.cable_size1[4], 200);
  this.cable_dictionary_1.Add (this.cable_size1[5], 230);
  this.cable_dictionary_1.Add (this.cable_size1[6], 255);
  this.cable_dictionary_1.Add (this.cable_size1[7], 285);
  this.cable_dictionary_1.Add (this.cable_size1[8], 355);

 }





















}

}

A: 

You don't want to rebind the source dropdown on a postback... in your Load method add a guard around your binding code:

if(!IsPostBack)
{
    /* Binding code here */
}

See here for information on Page.IsPostBack.

In your code you probably want to wrap it around like so:

if(!IsPostBack) {
       InitializeCurrentLoadCB();
       InitializeSystemTypeCB();

       //Cable size filter
       if ((cb_test_1.SelectedIndex==0)||
              (cb_test_1.SelectedIndex==1)||
              (cb_test_1.SelectedIndex==2)||
              (cb_test_1.SelectedIndex==3))
       {
              InitializeCableSizeCB0();
              InitializeCableLookup0();
       }
}

And then you will bind any dropdowns from the SelectedIndexChanged event of the parent dropdowns.

joshperry
Is there a specific namespace for "IsPostBack"?
tejas_grande
I am sorry I could not implement your suggestion. Can you provide more detail?
tejas_grande
+1  A: 

In InitializeCableSizeCB0(), make sure that you first remove any items from cable_size0, e.g:

private void InitializeCableSizeCB0()
{                       
    //Cable List, No Exclusions
    cable_size0.Clear();
    cable_size0.Add("Please Select Cable Size");
    ...

Otherwise you will re-add the same items over and over again (every time InitializeCableSizeCB0() is called).

M4N
That did it. Thank you!
tejas_grande