尝试一段时间将数据从我的主窗体中的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;
}
}
答案 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等数据源绑定。