Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法从另一个组合框更新组合框_C#_Combobox - Fatal编程技术网

C# 无法从另一个组合框更新组合框

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

我试图在选项卡页打开时填充Combox1,然后根据Combox1的selectedText填充Combox2

comboBox_SelectedIndexChange在选项卡更改时运行2次,但每次都返回null

注意:我已经在表单初始化时附加了事件处理程序,如下所示:

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";
            }
        }
    }