按价值设置ComboBox最优雅的方式

时间:2013-08-01 19:55:12

标签: c# winforms combobox

我通常会做网络内容,所以请原谅任何关于这个主题的无知。

我正在尝试从代码隐藏中加载一个组合框,如下所示:

        using (var con = new SqlConnection(ConStr)) {
        try {
            var dt = new DataTable();
            var cmd = new SqlCommand("usp_SelectContactDropDown", con) {                           
            CommandType = CommandType.StoredProcedure };                                      

                var adapter = new SqlDataAdapter {SelectCommand = cmd};
                adapter.Fill(dt);
                ((ComboBox) Controls.Find(ddContact, true)[0]).DataSource = dt;
                ((ComboBox) Controls.Find(ddContact, true)[0]).DisplayMember = "DisplayText";
                ((ComboBox) Controls.Find(ddContact, true)[0]).ValueMember = "ID";
                ((ComboBox) Controls.Find(ddContact, true)[0]).SelectedIndex = -1;
            }
            catch (Exception ex) { MessageBox.Show(ex.ToString()); }
            finally { /* Handle the error*/ }

其中ID是int。在此之后,我想根据值成员设置组合框的选定值。然而,这似乎是比较棘手的,我认为它需要。在asp中,这非常简单

        ddContact.SelectedValue = o.fk_ContactID.ToString(); 

我查看了其他一些问题(Q1Q2),这些问题似乎是指显示成员设置值。什么是最优雅的方式来解决这个问题?谢谢你提前。

1 个答案:

答案 0 :(得分:2)

你说WinForms,所以,除非组合在另一个类中,否则这应该有效

ddContact.DisplayMember = "DisplayText";
ddContact.ValueMember = "ID";
ddContact.DataSource = dt;
ddContact.Value = Convert.ToInt32(dt.Rows[0]["ID"]);

此外,我假设您已从查询中找到至少一条记录