将comboBox传递给另一个表单

时间:2015-02-06 21:53:46

标签: c# forms combobox

尝试一段时间将数据从我的主窗体中的comboBox传递到位于不同形式的组合框,即使我经历了其他类似/相同的线程,我也无法弄清楚为什么它不想成为以不同的形式显示。

主要表格:

    public static ComboBox cb = new ComboBox();


    private void ComboTransfer()
    {
        string sql = "SELECT [Department] FROM [employeeTable]";
        SqlCommand cmd = new SqlCommand(sql, con);
        SqlDataReader dr = cmd.ExecuteReader();
        while (dr.Read())
        {
            comboBox1.Items.Add(dr[0]);
        }
        cb = comboBox1;
        Department_wise_Employee_Details dep = new Department_wise_Employee_Details(cb);
    }

Department_wise_Employee_Details表格:

public partial class Department_wise_Employee_Details : Form
{
    public Department_wise_Employee_Details()
    {
        InitializeComponent();
    }

    public Department_wise_Employee_Details(ComboBox cb)
    {
        comboBox1 = cb;
    }
}

2 个答案:

答案 0 :(得分:1)

将全局静态cb传递给第二个表单可能会有效,但您需要读取此传递的组合的项目,并逐个添加第二个表单中定义的组合框。

如果您只是重新分配第二个组合以使用全局组合,您还需要将该组合添加到第二个组合的控件集合中(我不确定这里使用静态控件会产生什么副作用)。

也许最好的方法是传递共享数据,让Form引擎通常使用控件。在这种情况下,您加载一个DataTable包含要共享的数据,并使用它来设置两个组合的数据源属性。

例如

private void ComboTransfer()
{
    DataTable dt = new DataTable();
    string sql = "SELECT [Department] FROM [employeeTable]";
    using(SqlCommand cmd = new SqlCommand(sql, con))
    using(SqlDataReader dr = cmd.ExecuteReader())
    {
        dt.Load(dr);
    }
    comboBox1.DataSource = dt;
    Department_wise_Employee_Details dep = 
                 new Department_wise_Employee_Details(dt);
}

....


public partial class Department_wise_Employee_Details : Form
{
    ....
    public Department_wise_Employee_Details(DataTable dt)
    {
        InitializeComponent();
        this.comboBox1.DataSource = dt;
    }
    ....
}

答案 1 :(得分:0)

在这种情况下,始终将数据传递给新表单而不是控件。 ComboBox可以轻松地与DataTable,List等数据源绑定。