2009-02-14 32 views
0

我有一個小問題。我有一組ComboBox綁定到列表,這些列表與一組提供數學方程式的int值的字典相關聯。我需要根據cb_test_1的選擇過濾cb_test_2的結果。我覺得我很接近。當我更改cb_test_1中的值時會發生什麼情況,它會將正確的列表作爲數據綁定到ComboBox,然而,它會將其加倍,並將列表放置在ComboBox中兩次。我似乎無法找到我的代碼是什麼造成這種情況。請看一看。我歡迎任何幫助和批評。C#組合框數據綁定篩選器

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); 

    } 





















} 

}

回答

1

在InitializeCableSizeCB0(),請確保您第一次從cable_size0刪除任何物品,如:

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

否則你會一遍又一遍地重新添加同一項目再次(每次InitializeCableSizeCB0()被調用)。

0

你不想重新綁定回發源下拉...在你的Load方法周圍添加您綁定代碼保護:

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

here爲有關Page.IsPostBack的信息。

在你的代碼可能想它環繞像這樣:

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(); 
     } 
} 

,然後你會綁定任何下拉列表從父下拉菜單中的SelectedIndexChanged事件。

+0

是否有「IsPostBack」的特定命名空間? – 2009-02-14 02:12:13

+0

我很抱歉無法實施您的建議。你能提供更多細節嗎? – 2009-02-14 15:38:24