C# 组合框显示成员问题,让我发疯

C# 组合框显示成员问题,让我发疯,c#,winforms,combobox,C#,Winforms,Combobox,很抱歉打扰您,但是我在C#Winforms上遇到了一个问题,因为我一直在搜索同一个问题,我找到了一些解决方案,但它们对我不起作用。好的,我有一个包含对象的绑定列表 BindingList<objects.usuario> usuarios = new BindingList<objects.usuario>(); 所以,一旦列表“usuarios”有了一些对象,我就会这样做 cbAdministrativos.DisplayMember = "d

很抱歉打扰您,但是我在C#Winforms上遇到了一个问题,因为我一直在搜索同一个问题,我找到了一些解决方案,但它们对我不起作用。好的,我有一个包含对象的绑定列表

BindingList<objects.usuario> usuarios = new BindingList<objects.usuario>();
所以,一旦列表“usuarios”有了一些对象,我就会这样做

            cbAdministrativos.DisplayMember = "dataNombre";
            cbAdministrativos.ValueMember = "dataIdUsuario";
            cbAdministrativos.DataSource = usuarios;
问题是,它不工作了,组合框(CBAdministrativiOS)仍然显示对象

当我通过调试器时,在一个断点之后,组合框会按照代码的顺序设置display成员、valuemember和datasource,但是在下一条指令(方法的末尾)中,我意识到displaymember神奇地变成了“”而不是字符串“dataNombre”

有什么想法吗

提前谢谢,很抱歉英语不好

对不起,谢谢大家!在我绝望中,我尝试了对象中的不同字段,但我没有意识到我在问题中的示例代码中留下了“dataNombre”而不是“dataNombreCompleto”,无论如何,这是正确的,这是我原始代码中的原始DisplayMember,但问题仍然存在:(

应该是:

cbAdministrativos.DisplayMember = "dataNombreCompleto";

也可以考虑使用公共属性而不是公共字段。

更改此项:

public string dataNombreCompleto;
public int dataIdUsuario;
为此:

public string dataNombreCompleto { get; set; }
public int dataIdUsuario { get; set; }

您需要设置displayMember的确切名称。请尝试此操作

cbAdministrativos.DisplayMember = "dataNombreCompleto";

您希望设置为
显示成员
值成员
的对象是什么?这两个对象是否来自您的问题

public string dataNombreCompleto;
public int dataIdUsuario;
然后,您可以将dataNombreCompleto设置为
Display Member
dataIdUsuario设置为
Value Member

cbAdministrativos.DisplayMember = "dataNombreCompleto";
cbAdministrativos.ValueMember = "dataIdUsuario";
cbAdministrativos.DataSource = usuarios;
以下是显示成员和值成员之间的区别:
  • 对于
    DisplayMember
    属性,它被设计为以 组合框。
    ValueMember
    隐藏在
    DisplayMember
    后面
  • 对于
    ValueMember
    属性,其设计用于获取 与下拉列表中的选择相对应
要更好地理解
DisplayMember
ValueMember
属性,您可以参考:


    • 您需要在usuario类中使用getter和setter

      string dataNombreCompleto;
           int dataIdUsuario;
      
        public   string _DataNumComp
           {
               get
               {
                   return dataNombreCompleto;
               }
               set
               {
      
                   dataNombreCompleto = value;
               }
           }
      
        public int _ID
        {
            get
            {
                return dataIdUsuario;
            }
            set
            {
      
                dataIdUsuario = value;
            }
        }
      
      然后根据需要修改绑定代码。例如,查看给定的代码片段:

              cbAdministrativos.ValueMember = "_ID";
              cbAdministrativos.DisplayMember = "_DataNumComp";
              cbAdministrativos.DataSource = usuarios;
      
      我希望这能解决您的问题。

      在我的情况下,它是设计器中设置为
      true
      的属性


      根据文档,当数据绑定处于打开状态时,当设置为true时会引发异常,但如果在
      排序的
      属性设置为
      true
      后设置
      数据源
      XMember
      属性,则显然不会引发异常;它只是默默地不起作用,直到没有剩余数据。

      也有类似问题。请先尝试分配数据源:

              cbAdministrativos.DataSource = usuarios;
              cbAdministrativos.DisplayMember = "dataNombre";
              cbAdministrativos.ValueMember = "dataIdUsuario";
      

      dataNombre属性在哪里?DisplayMember不应该是dataNombreCompletothanks吗?我没有意识到在示例代码中,我写了错误的值,但问题仍然存在:(这是我的问题-我让它工作,然后将公共属性更改为公共字段,它破坏了它。我不知道这是如此糟糕的做法。谢谢!谢谢,我没有意识到在示例代码中,我写了错误的值,但问题仍然存在:(谢谢,我没有意识到在示例代码中,我写了错误的值,但问题仍然存在:(
              cbAdministrativos.DataSource = usuarios;
              cbAdministrativos.DisplayMember = "dataNombre";
              cbAdministrativos.ValueMember = "dataIdUsuario";