组合框显示成员问题,让我抓狂

本文关键字:显示 成员问题 组合 | 更新日期: 2023-09-27 17:49:24

很抱歉打扰,但我有一个问题与c# Winforms,因为我一直在寻找同样的问题,我发现了一些解决方案,但他们不适合我。好的,我有一个包含对象的绑定列表

BindingList<objects.usuario> usuarios = new BindingList<objects.usuario>();

对象有一些公共字符串和int型变量,一个字符串和一个int型是我需要的变量。

public string dataNombreCompleto;
public int dataIdUsuario;

那么,一旦列表"usuarios"有了一些对象,我就执行

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

问题是,它不工作,组合框(cbAdministrativos)仍然显示对象

当我通过调试器时,在断点之后,组合框设置了显示成员、值成员和数据源,正如代码所做的那样,但是,在下一条指令(方法的末尾)中,我意识到displaymember神奇地变成了"而不是字符串"dataNombre"。

任何想法?

提前感谢,很抱歉我的英语不好。

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

组合框显示成员问题,让我抓狂

应该是:

cbAdministrativos.DisplayMember = "dataNombreCompleto";

同时,考虑使用公共属性而不是公共字段。

公共字段是邪恶的

改变:

public string dataNombreCompleto;
public int dataIdUsuario;

:

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

你需要在平常的类中使用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;

我希望这将解决你的问题

您需要设置displayMember的确切名称。试试这个

cbAdministrativos.DisplayMember = "dataNombreCompleto";

要设置为Display MemberValue Member的对象是什么?这两个是你问题中的吗?

public string dataNombreCompleto;
public int dataIdUsuario;

则可以设置dataNombreCompletoDisplay MemberdataIdUsuarioValue Member

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

下面是Display Member和Value Member的区别:

  • 对于DisplayMember属性,它被设计用来显示字符串组合框。ValueMember隐藏在DisplayMember后面。
  • 对于ValueMember属性,它被设计为获取以下值对应下拉列表中的选择。

为了更好地理解DisplayMemberValueMember属性,您可以参考:

    <
  • 显示成员/gh><
  • 价值成员/gh>

在我的例子中,它是在设计器中设置为true的Sorted属性。

根据文档,当将此设置为true而数据绑定打开时抛出异常,但如果在Sorted属性设置为true之后设置DataSourceXMember属性,则显然没有抛出异常;它只是默默地不起作用,你把你珍贵的头发拔出来,直到一根也不剩。

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

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

似乎当您设置DataSource属性时,ComboBox检查DisplayMember是否作为属性存在(/field?不知道,这里从来没有尝试过字段),如果没有,那么ComboBox会清除DisplayMember属性。

如果ComboBox生成一个异常(早期失败)而不是隐藏失败,效果会更好。