我有一个小问题。我有一组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);
}
}
}
答案 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事件中的任何下拉列表。