【问题标题】:Most Elegant Way to Set ComboBox by Value按值设置 ComboBox 的最优雅方式
【发布时间】:2013-08-02 22:09:51
【问题描述】:

我通常在做网络工作,所以请原谅对这个主题的任何无知。

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

        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(); 

我检查了其他一些问题 (Q1,Q2),这些问题似乎是指通过显示成员设置值。最优雅的方法是什么?提前谢谢你。

【问题讨论】:

  • 为什么要使用 Controls.Find?直接语法(如果在同一个类上)有效
  • 不要使用ToString()。与操作字符串的 ASP.NET 不同,WinForms 使用类型敏感的比较。
  • @Steve,说句公道话,他说他对这个话题一无所知 - 所以你的评论是没有实际意义的 :)
  • @AlexSkalozub 看来问题是 ToString() 调用。如果你把它作为一个答案,我会这样标记它。谢谢大家

标签: c# winforms combobox


【解决方案1】:

你说的是 WinForms,所以,除非组合在另一个类中,否则这应该可以工作

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

另外我假设你已经从你的查询中找到了至少一条记录

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-12
    • 1970-01-01
    • 2011-10-03
    • 1970-01-01
    • 2010-12-04
    • 1970-01-01
    • 2018-04-01
    • 1970-01-01
    相关资源
    最近更新 更多