C#ComboBox数据绑定过滤器

时间:2009-02-14 01:40:32

标签: c# dictionary

我有一个小问题。我有一组ComboBox绑定到列表,这些列表与一组为数学方程提供int值的字典相关联。我需要根据cb_test_1的选择过滤cb_test_2的结果。我想我很亲密。当我更改cb_test_1中的值时会发生什么,它将正确的列表应用为ComboBox的数据绑定,但是,它会将列表放在ComboBox中两次。我似乎无法找到我的代码中导致此问题的原因。请看一看。我欢迎任何帮助和批评。

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

    }





















}

}

2 个答案:

答案 0 :(得分:1)

在InitializeCableSizeCB0()中,请确保首先从cable_size0中删除任何项目,例如:

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

否则,您将反复添加相同的项目(每次调用InitializeCableSizeCB0()时)。

答案 1 :(得分:0)

您不希望在回发中重新绑定源下拉列表...在您的加载方法中为绑定代码添加一个保护:

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

有关Page.IsPostBack的信息,请参阅here

在您的代码中,您可能希望将其包裹起来:

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事件中的任何下拉列表。