C # ComboBox Фильтр привязки данных - PullRequest
0 голосов
/ 14 февраля 2009

У меня небольшая проблема. У меня есть набор ComboBox, которые связаны со списками, которые связаны с набором словарей, которые предоставляют значения int для математического уравнения. Мне нужно отфильтровать результат cb_test_2 на основе выбора cb_test_1. Я думаю, что я рядом. Что происходит, когда я изменяю значение в 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 ]

1 голос
/ 15 февраля 2009

В InitializeCableSizeCB0 () убедитесь, что вы сначала удалили все элементы из cable_size0, например:

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

В противном случае вы будете снова и снова добавлять одни и те же элементы (каждый раз, когда вызывается InitializeCableSizeCB0 ()).

0 голосов
/ 14 февраля 2009

Вы не хотите перепривязывать исходный выпадающий список при обратной передаче ... в вашем методе Load добавьте защиту вокруг вашего кода привязки:

if(!IsPostBack)
{
    /* Binding code 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 родительских выпадающих списков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...