2009-02-14 7 views
0

J'ai un petit problème. J'ai un ensemble de ComboBox qui sont liés à des listes qui sont associées à un ensemble de dictionnaires qui fournissent des valeurs int pour une équation mathématique. J'ai besoin de filtrer le résultat de cb_test_2 en fonction de la sélection de cb_test_1. Je pense que je suis proche. Que se passe-t-il lorsque je change la valeur dans cb_test_1, il applique la liste correcte comme une liaison de données à la ComboBox, cependant, il double, en plaçant la liste dans le ComboBox deux fois. Je ne peux pas sembler trouver ce que dans mon code cause ceci. Jetez un coup d'oeil s'il vous plait. J'accueille toute aide et/ou critique.C# ComboBox Filtre de liaison de données

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

    } 





















} 

}

Répondre

1

Dans InitializeCableSizeCB0(), assurez-vous que vous devez d'abord supprimer tous les éléments de cable_size0, par exemple:

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

Sinon, vous rajoutez les mêmes éléments encore et encore (à chaque fois InitializeCableSizeCB0() est appelée).

+0

C'est ce qu'il a fait. Je vous remercie! –

0

Vous ne voulez pas lier de nouveau le menu déroulant source sur un postback ... dans votre méthode de charge ajouter un garde autour de votre code de liaison:

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

Voir here pour informations sur Page.IsPostBack.

Dans votre code, vous voudrez probablement l'envelopper autour comme si:

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

Et vous ne contraindra dropdowns de l'événement SelectedIndexChanged des listes déroulantes parents.

+0

Existe-t-il un espace de noms spécifique pour "IsPostBack"? –

+0

Je suis désolé de ne pas avoir pu implémenter votre suggestion. Pouvez-vous fournir plus de détails? –