Combobox显示成员问题,让我发疯

时间:2014-03-10 01:27:19

标签: c# winforms combobox

很抱歉打扰,但是我遇到了C#Winforms的问题,因为我一直在寻找同样的问题,我找到了一些解决方案,但它们并不适合我。好的,我有一个带对象的Bindinglist

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)仍然显示对象。

当我通过调试器时,在断点之后,组合框设置显示成员,值成员和数据源,如代码所示,但是,在下一条指令(方法结束)中,我意识到显然,成员会变成“”而不是字符串“dataNombre”。

有什么想法吗?

提前致谢,对不好的英语感到抱歉。

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

6 个答案:

答案 0 :(得分:5)

应该是:

cbAdministrativos.DisplayMember = "dataNombreCompleto";

另外,请考虑使用公共属性而不是公共字段。

Public Fields are evil

改变这个:

public string dataNombreCompleto;
public int dataIdUsuario;

对此:

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

答案 1 :(得分:2)

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

cbAdministrativos.DisplayMember = "dataNombreCompleto";

答案 2 :(得分:2)

您要将哪些对象设置为Display MemberValue Member?你的问题是这两个吗?

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属性,它旨在获取值 对应于下拉列表中的选择。

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

答案 3 :(得分:2)

你需要在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;

我希望这能解决您的问题。

答案 4 :(得分:0)

就我而言,设计师将Sorted属性设置为true

根据文档,如果在数据绑定打开时将此异常设置为true,则会抛出异常但如果在{{1}之后设置DataSourceXMember属性,则显然不会抛出异常} property设置为Sorted;它只是默默地不起作用,你把你的宝贵的头发拉出来,直到没有留下。

答案 5 :(得分:0)

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

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