【问题标题】:Is there "DisplayMember" and "ValueMember" like Properties for CheckedListBox control? C# winformsCheckedListBox 控件是否有“DisplayMember”和“ValueMember”之类的属性? C# 窗体
【发布时间】:2011-04-17 14:36:27
【问题描述】:

我有这个DataTable,其结构如下:

ID | VALUE
----------------
1  | Item 1
2  | Item 2
3  | Item 3

我通过将每一行添加为一个项目,将来自DataTable 的值显示到CheckedListBox 控件中。

但是我怎样才能包含 ID? CheckedListBox 控件是否有“DisplayMember”和“ValueMember”之类的属性?

【问题讨论】:

    标签: c# winforms data-binding checkedlistbox


    【解决方案1】:

    The french documentation 说:Cette propriété ne s'applique pas à cette classe。 “此属性不适用于此类”。 美国文档中看不到这一小行文字...

    【讨论】:

      【解决方案2】:

      是的,CheckedListBox 中有“显示成员”和“值成员”属性。

      您可以像在组合框中一样设置属性:

         public void PopulateListBox(System.Windows.Forms.CheckedListBox lb, string displayMember, string valueMember, DataTable data)
         {
              lb.DataSource = data; // where data is the datatable. datatable filled up with //data fetched from database.
              lb.ValueMember = valueMember;
              lb.DisplayMember = displayMember;
         }
      

      【讨论】:

        【解决方案3】:

        是的,CheckedListBox 上有 DisplayMemberValueMember 属性,尽管 ValueMember 的文档声称它“与此类无关”。

        这是一个显示DisplayMember 工作的简单示例:

        using System;
        using System.Drawing;
        using System.Windows.Forms;
        
        class Test
        {
            static void Main()
            {
                CheckedListBox clb = new CheckedListBox {
                    DisplayMember = "Foo",
                    ValueMember = "Bar",
                    Items = {
                        new { Foo = "Hello", Bar = 10 },
                        new { Foo = "There", Bar = 20 }
                    }
                };
                Form f = new Form
                {
                    Controls = { clb }
                };
                Application.Run(f);
            }
        }
        

        还要注意文档状态:

        您不能将数据绑定到 CheckedListBox。为此,请使用 ComboBox 或 ListBox。 有关详细信息,请参阅如何:将 Windows 窗体 ComboBox 或 ListBox 控件绑定到数据。

        鉴于上述代码有效,大概是在谈论更高级的数据绑定,使用DataSource

        【讨论】:

        • 我在 CheckedListBox 上没有看到 DisplayMember 和 ValueMember 属性的任何先生。
        • @yonan2236:它们就在那里...... IntelliSense 或设计师可能不会建议它们,但它们确实存在。
        • 非常感谢先生。 (Jon Skeet 先生回答了我的问题,我今天感到很幸运。)
        • 出于某种原因,DisplayMember、DataSource、DrawMode 和 ItemHeight 是 CheckedListBox 的隐藏属性。您可以使用它们,但如果隐藏项不显示(通常不显示),智能感知和对象浏览器将不会显示它们。
        • DisplayMember 如果您在DataSource 之后分配它似乎可以工作,但不是在之前。因此,如果在属性窗口中设置它不会有任何效果。这可能是该属性被隐藏的原因。
        【解决方案4】:

        DataSource、DisplayMember 和 ValueMember 属性可用于此控件,但它们不会显示在 IntelliSense 中:MSDN

        不过你应该可以使用它们。

        【讨论】:

        • 哇,为什么这在 Intellisense 中不显示?这非常令人困惑。
        • 好的,因为这些属性上的 BrowsableAttribute 的值为 false。
        猜你喜欢
        • 2012-11-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-06
        相关资源
        最近更新 更多