winforms Combobox displaymember问题,快把我逼疯了

rn0zuynd  于 2023-06-30  发布在  其他
关注(0)|答案(7)|浏览(158)

抱歉打扰,但我有一个问题与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)仍然显示对象。
当我通过调试器时,在断点之后,组合框设置了显示成员,valuemember和datasource,随着代码的进行,但是,在下一条指令(方法的结束)中,我意识到displaymember神奇地变成了“”而不是字符串“dataNombre”。
你知道吗?
先谢谢你了,抱歉英语不好。
感谢您的评分!在绝望中,我尝试了对象中的不同字段,我没有意识到我在问题中的示例代码中留下了“dataNombre”而不是“dataNombreCompleto”,无论如何这是正确的,这是我原始代码中的原始DisplayMember,但是,问题仍然存在:(**

niwlg2el

niwlg2el1#

它应该是:

cbAdministrativos.DisplayMember = "dataNombreCompleto";

此外,请考虑使用公共属性而不是公共字段。
Public Fields are evil
更改此:

public string dataNombreCompleto;
public int dataIdUsuario;

对此:

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

68de4m5k2#

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

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

iklwldmw

iklwldmw3#

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

cbAdministrativos.DisplayMember = "dataNombreCompleto";
e4yzc0pl

e4yzc0pl4#

您希望设置为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属性,您可以参考:

llycmphe

llycmphe5#

在我的例子中,它是Sorted属性,在设计器中设置为true
根据文档,当数据绑定打开时,当this设置为true时会抛出异常,但如果在Sorted属性设置为true之后设置DataSourceXMember属性,则显然不会抛出异常;它只是默默地不工作,你把你宝贵的头发,直到有没有离开。

bvhaajcl

bvhaajcl6#

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

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

inb24sb27#

似乎在设置DataSource属性时,ComboBox会检查DisplayMember是否作为属性(/field?不知道,从未尝试过此处的字段),如果没有,则ComboBox清除DisplayMember属性。
如果ComboBox生成一个异常(提前失败)而不是隐藏失败,那会更好。

相关问题