我想从数据库中将数据插入到我的ComboBox中。这是我的代码:
OracleDataTable dt = new OracleDataTable();
OracleConnection conn = new OracleConnection();
conn.ConnectionString = "....string....";
string query = "SELECT emp_username FROM dc_emp";
OracleDataAdapter da = new OracleDataAdapter(query,conn);
da.Fill(dt);
rp.cbDelivery.DataSource = dt;
rp.cbDelivery.DisplayMember = "emp_username";
这可行,但不是100%。我在组合框中获得了正确数量的字段,但名称值已被CoreLab.Common取代。
所以它肯定会连接到数据库表并带回正确数量的字段但不是正确的值......
希望这是有道理的。
请帮忙。
答案 0 :(得分:0)
像这样 -
rp.cbDelivery.DataSource = dt
rp.cbDelivery.DisplayMember = "emp_username";
rp.cbDelivery.ValueMember = "emp_username";
也可以使用Datatable dt= new DataTable();
代替OracleDataTable dt = new OracleDataTable();
答案 1 :(得分:0)
分配ValueMember:
rp.cbDelivery.ValueMember =" emp_username";
答案 2 :(得分:0)
在我看来,你应该关注以下几行:
rp.cbDelivery.DisplayMember = "emp_username";
问题可能是因为DataTable
列名称不包含您所指的列名称。这是一个可能重现您的问题的例子:
dt.Columns.Add("Id", typeof(int));
dt.Columns.Add("Name", typeof(string));
dt.Rows.Add(new object[] { 1, "Alex" });
dt.Rows.Add(new object[] { 2, "John" });
dt.Rows.Add(new object[] { 3, "Mary" });
comboBox1.DataSource = dt;
comboBox1.DisplayMember = "Name_with_typo"; //here you should use Name
答案 3 :(得分:0)
你应该首先使用DisplayMember
这样:
OracleConnection conn = new OracleConnection("....string....");
string query = "SELECT emp_username FROM dc_emp";
OracleDataAdapter da = new OracleDataAdapter(query,conn);
OracleDataTable dt = new OracleDataTable();
da.Fill(dt);
rp.cbDelivery.DisplayMember = "emp_username";
rp.cbDelivery.DataSource = dt;
答案 4 :(得分:0)
感谢所有反馈。我尝试了你所有的建议,最后我找到了一个例子并修改它以适合我。这是下面的工作代码:
OracleDataReader dr;
OracleConnection conn = new OracleConnection();
conn.ConnectionString = "....string....";
string query = "SELECT distinct dd.delivery_bay_code FROM dc_delivery dd, dc_grv dg WHERE delivery_complete_datetime is null AND dd.dc_delivery_id_no = dg.dc_delivery_id_no";
OracleCommand cmd = new OracleCommand(query, conn);
conn.Open();
dr = cmd.ExecuteReader();
while(dr.Read())
{
if (dr[0].ToString().Length > 2)
cbDelivery.Items.Add(dr[0].ToString());
}
conn.Close();