C# 无法从另一个组合框更新组合框
我试图在选项卡页打开时填充Combox1,然后根据Combox1的selectedText填充Combox2 comboBox_SelectedIndexChange在选项卡更改时运行2次,但每次都返回null 注意:我已经在表单初始化时附加了事件处理程序,如下所示:C# 无法从另一个组合框更新组合框,c#,combobox,C#,Combobox,我试图在选项卡页打开时填充Combox1,然后根据Combox1的selectedText填充Combox2 comboBox_SelectedIndexChange在选项卡更改时运行2次,但每次都返回null 注意:我已经在表单初始化时附加了事件处理程序,如下所示: private void tabControl1_Selected(object sender, TabControlEventArgs e) { if (e.TabPage.Name == tabPage
private void tabControl1_Selected(object sender, TabControlEventArgs e)
{
if (e.TabPage.Name == tabPage2.Name)
{
table = Items.Get();
comboBox1.DataSource = table;
comboBox1.DisplayMember = "Item_ID";
}
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
DataTable temp = new DataTable();
string text = comboBox1.SelectedItem.ToString();
temp = Color.Get(text);
comboBox2.DataSource = temp;
comboBox2.DisplayMember = "Color_Name";
comboBox2.ValueMember = "Color_ID";
}
首先,有一个错误
public Form1()
{
InitializeComponent();
tabControl1.Selected += new TabControlEventHandler(tabControl1_Selected);
comboBox1.SelectedIndexChanged += comboBox1_SelectedIndexChanged;
table = new DataTable();
s = new Stock();
}
代码。在第行中重写数据源的值
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
DataTable temp = new DataTable();
string text = comboBox1.SelectedItem.ToString();
temp = Color.Get(text);
comboBox2.DataSource = temp;
comboBox2.DisplayMember = "Color_Name";
comboBox2.ValueMember = "Color_ID";
}
我认为应该是这样的:
temp = Color.Get(text);
我不知道DataTable的内容,因此您可能需要设置comboBox2的SelectedItem、SelectedText或SelectedValue属性,而不是comboBox2.SelectedItem。此处的可疑行:
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
DataTable temp = new DataTable();
string text = comboBox1.SelectedItem.ToString();
selectedColor = Color.Get(text);
comboBox2.DataSource = temp;
comboBox2.DisplayMember = "Color_Name";
comboBox2.ValueMember = "Color_ID";
comboBox2.SelectedItem = selectedColor;
}
您将得到一个文本变量,该变量由YourNamespace.DataTable填充。如果您的函数Color.Gettext期望所选项的项_ID作为参数,则应将上面的代码行更改为:
string text = comboBox1.SelectedItem.ToString();
我假设DataTable是一个具有Item\u ID属性的对象。什么是Color.Gettext?comboBox1的ValueMember是什么?为什么需要DataTable temp=new DataTable,如果下面两行您需要temp=…?实际上它是用户定义的类public DataTable Color.Getstring ItemID//返回传递的ItemID的可用颜色。数据表的内容是int类型的Color\u ID和string类型的Color\u Name。您可以通过在tabControl1\u Selected中设置的私有成员bool变量和在comboBox1\u SelectedIndexChanged中读取的变量来防止代码运行两次。我唯一的评论是,您不应该用诸如Color之类的知名系统类型的名称来命名您的类型
string text = ((DataTable)comboBox1.SelectedItem).Item_ID;
private void tabControl1_Selected(object sender, TabControlEventArgs e)
{
if (e.TabPage.Name == tabPage2.Name)
{
table = Items.Get();
if (table.Rows.Count > 0)
{
//Update comboBox1 using table
comboBox1.DataSource = table;
comboBox1.DisplayMember = "Item_ID";
//Using 1st row and 1st coloumn in function argument to get colors
//Color.Get(string itemID) returns dataTable, which I used for comboBox2 DataSource
comboBox2.DataSource = Color.Get(table.Rows[0].ItemArray[0].ToString());
comboBox2.ValueMember = "Color_ID";
comboBox2.DisplayMember = "Color_Name";
}
}
}