从数据库填充组合框 [英] Fill Combobox from database
问题描述
我有一个错误与组合框
我的code:
SqlConnection的康恩=新的SqlConnection();
尝试
{
康恩=新的SqlConnection(@数据源= SHARKAWY;初始目录=预订;坚持安全信息= TRUE;用户ID = SA;密码= 123456);
查询字符串=从舰队选择FleetName,FleetID
CMD的SqlCommand =新的SqlCommand(查询,康涅狄格州);
cmd.CommandText =查询;
conn.Open();
SqlDataReader的DRD = cmd.ExecuteReader();
而(drd.Read())
{
cmbTripName.Items.Add(DRD [FleetName]的ToString());
cmbTripName.ValueMember = DRD [FleetID]的ToString()。
cmbTripName.DisplayMember = DRD [FleetName]的ToString()。
}
}
抓住
{
的MessageBox.show(错误);
}
中的数据是在组合框中psented $ P $,但是当你的更改选择valuemember将DisplayMember不会改变。
它的工作,但现在当我点击按钮来显示数据
私人无效的button1_Click(对象发件人,EventArgs的发送)
{
label1.Text = cmbTripName.DisplayMember;
label2.Text = cmbTripName.ValueMember;
}
这是显示:
FleetName结果
FleetID
它不显示值
您必须完全重新编写code。 的DisplayMember 和 ValueMember 点COLUMNNAMES!此外,你真的应该使用使用块
- 这样的连接获得的处理的(和关闭的)查询执行后,<。 / p>
而不是使用的DataReader 访问我选用一个的dataTable 的值,并约束其作为数据源到组合框。
使用(SqlConnection的康恩=新的SqlConnection(@数据源= SHARKAWY;初始目录=预订;坚持安全信息= TRUE;用户ID = SA;密码= 123456))
{
尝试
{
查询字符串=从舰队选择FleetName,FleetID
SqlDataAdapter的大=新SqlDataAdapter的(查询,康涅狄格州);
conn.Open();
DataSet的DS =新的DataSet();
da.Fill(DS,舰队);
cmbTripName.DisplayMember =FleetName;
cmbTripName.ValueMember =FleetID;
cmbTripName.DataSource = ds.Tables [舰队];
}
赶上(异常前)
{
//写异常信息记录或其他任何
MessageBox.Show(错误!);
}
}
使用的的dataTable 的可能是一个稍微慢一点比的DataReader 的,但我的没有创造我自己的类的。如果你真的有/想使用一个的的DataReader的的你可以选择的 @Nattrass方法。在任何情况下,你应该写一个 使用阻止 !
修改
如果你想获得组合框的当前值试试这个
私人无效cmbTripName_SelectedIndexChanged(对象发件人,EventArgs的发送)
{
如果(cmbTripName.SelectedItem!= NULL)
{
DataRowView的DRV = cmbTripName.SelectedItem为DataRowView的; 的Debug.WriteLine(项目:+ drv.Row [FleetName]的ToString());
的Debug.WriteLine(值:+ drv.Row [FleetID]的ToString());
的Debug.WriteLine(价值:+ cmbTripName.SelectedValue.ToString());
}
}
I have an error with a combobox
My code:
SqlConnection conn = new SqlConnection();
try
{
conn = new SqlConnection(@"Data Source=SHARKAWY;Initial Catalog=Booking;Persist Security Info=True;User ID=sa;Password=123456");
string query = "select FleetName, FleetID from fleets";
SqlCommand cmd = new SqlCommand(query, conn);
cmd.CommandText = query;
conn.Open();
SqlDataReader drd = cmd.ExecuteReader();
while (drd.Read())
{
cmbTripName.Items.Add(drd["FleetName"].ToString());
cmbTripName.ValueMember = drd["FleetID"].ToString();
cmbTripName.DisplayMember = drd["FleetName"].ToString();
}
}
catch
{
MessageBox.Show("Error ");
}
The data is presented in the combobox, but when you change the selection valuemember the displaymember does not change.
It's working now but when I click the button to show the data
private void button1_Click(object sender, EventArgs e)
{
label1.Text = cmbTripName.DisplayMember;
label2.Text = cmbTripName.ValueMember;
}
This is displayed:
FleetName
FleetID
It does not display the value
You will have to completely re-write your code. DisplayMember and ValueMember point to columnNames! Furthermore you should really use a using block
- so the connection gets disposed (and closed) after query execution.
Instead of using a dataReader to access the values I choosed a dataTable and bound it as dataSource onto the comboBox.
using (SqlConnection conn = new SqlConnection(@"Data Source=SHARKAWY;Initial Catalog=Booking;Persist Security Info=True;User ID=sa;Password=123456"))
{
try
{
string query = "select FleetName, FleetID from fleets";
SqlDataAdapter da = new SqlDataAdapter(query, conn);
conn.Open();
DataSet ds = new DataSet();
da.Fill(ds, "Fleet");
cmbTripName.DisplayMember = "FleetName";
cmbTripName.ValueMember = "FleetID";
cmbTripName.DataSource = ds.Tables["Fleet"];
}
catch (Exception ex)
{
// write exception info to log or anything else
MessageBox.Show("Error occured!");
}
}
Using a dataTable may be a little bit slower than a dataReader but I do not have to create my own class. If you really have to/want to make use of a DataReader you may choose @Nattrass approach. In any case you should write a using block!
EDIT
If you want to get the current Value of the combobox try this
private void cmbTripName_SelectedIndexChanged(object sender, EventArgs e)
{
if (cmbTripName.SelectedItem != null)
{
DataRowView drv = cmbTripName.SelectedItem as DataRowView;
Debug.WriteLine("Item: " + drv.Row["FleetName"].ToString());
Debug.WriteLine("Value: " + drv.Row["FleetID"].ToString());
Debug.WriteLine("Value: " + cmbTripName.SelectedValue.ToString());
}
}
这篇关于从数据库填充组合框的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!