我使用Visual Studio 2010和C#创建一个带有组合框的窗体,该组合应包含员工姓名首字母。我花了最后几天搜索我能找到的每个解决方案,但仍然无法让我的组合框填充。
这就是我现在所拥有的:
public static void FillComboBox(string Query, System.Windows.Forms.ComboBox LoggedByBox)
{
using (var CONN = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Users\\Documents\\Service Request Application\\bin\\Debug\\servicereq1.mdb"))
{
CONN.Open();
DataTable dt = new DataTable();
try
{
OleDbCommand cmd = new OleDbCommand(Query, CONN);
OleDbDataReader myReader = cmd.ExecuteReader();
dt.Load(myReader);
}
catch (OleDbException e)
{
Console.WriteLine(e.ToString());
Console.ReadLine();
return;
}
LoggedByBox.DataSource = dt;
LoggedByBox.ValueMember = "ID";
LoggedByBox.DisplayMember = "Initials";
}
}
然后我在表单加载时调用它
private void Form1_Load(object sender, EventArgs e)
{
FillComboBox("select ID, Initials from [Fixers and Testers]", LoggedByBox);
}
当我运行程序时,组合框仍然是空白的。我很肯定我的列名和表名是正确的。有什么建议吗?
答案 0 :(得分:2)
我终于把我的ComboBox填满了,我想分享我为其他在搜索中偶然发现这个问题的人所做的改变。花了一点时间搜索其他问题和MSDN后,我能够想出这个。
private void LoadComboLogged()
{
AppDomain.CurrentDomain.SetData("DataDirectory",@"\\prod\ServiceRequests");
string strCon = @"Provider=Microsoft.Jet.OLEDB.4.0;DataSource=|DataDirectory|\servicereq1.mdb";
try
{
using (OleDbConnection conn = new OleDbConnection(strCon))
{
conn.Open();
string strSql = "SELECT Initials FROM [Fixers and Testers] WHERE [Status] ='C'";
OleDbDataAdapter adapter = new OleDbDataAdapter(new OleDbCommand(strSql, conn));
DataSet ds = new DataSet();
adapter.Fill(ds);
loggedByComboBox.DataSource = ds.Tables[0];
loggedByComboBox.DisplayMember = "Initials";
loggedByComboBox.ValueMember = "Initials";
}
}
catch (Exception ex)
{
}
}
我还发现我需要打电话
LoadComboLogged();
我初始化表单时如果没有该行,ComboBox将只显示一个空白下拉列表。希望这可以帮助遇到此问题的其他人。
答案 1 :(得分:0)
将控制权传递给导致此问题的静态方法。不是将控制传递给方法,而是使该方法返回表,并在load方法中加载控件。
答案 2 :(得分:0)
SqlConnection con = new SqlConnection("Data Source=RUSH-PC\\RUSH;Initial Catalog=Att;Integrated Security=True");
con.Open();
SqlDataAdapter da = new SqlDataAdapter("select name from userinfo", con);
DataTable dt = new DataTable();
da.Fill(dt);
DataRow dr;
dr = dt.NewRow();
dt.Rows.InsertAt(dr, 1);
comboBox1.DisplayMember = "name";
comboBox1.ValueMember = "name";
comboBox1.DataSource = dt;
con.Close();
这可能对你有所帮助...... 祝你好运......: - )
答案 3 :(得分:0)
另一种可能的解决方案是查询并返回字符串列表。也许它可能效率较低,但这是我最近在我的项目中使用的。这是一个驻留在方法中的示例,可能称为GetInitialsFromDatabase():
using(var conn = new MySqlConnection(connectionString)
{
conn.Open();
using(MySqlCommand cmd = new MySqlCommand())
{
cmd.Connection = conn;
cmd.CommandText = "SELECT Initials FROM [Fixers and Testers] WHERE [Status] ='C'";
MySqlDataReader reader = cmd.ExecuteReader();
while(reader.Read())
{
// initials is a List<String> previously defined (Assuming strings)
initials.Add(String.Format("{0}", reader[0]));
}
}
conn.Close();
}
然后返回首字母列表,然后在你的GUI中你可以说:
comboBox1.DataSource = returnedList;
comboBox1.DropDownStyle = ComboBoxStyle.DropDownList;