组合框显示成员问题,让我抓狂
本文关键字:显示 成员问题 组合 | 更新日期: 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 Member
和Value Member
的对象是什么?这两个是你问题中的吗?
public string dataNombreCompleto;
public int dataIdUsuario;
则可以设置dataNombreCompleto为Display Member
, dataIdUsuario为Value Member
。
cbAdministrativos.DisplayMember = "dataNombreCompleto";
cbAdministrativos.ValueMember = "dataIdUsuario";
cbAdministrativos.DataSource = usuarios;
下面是Display Member和Value Member的区别:
- 对于
DisplayMember
属性,它被设计用来显示字符串组合框。ValueMember
隐藏在DisplayMember
后面。 - 对于
ValueMember
属性,它被设计为获取以下值对应下拉列表中的选择。
为了更好地理解DisplayMember
和ValueMember
属性,您可以参考:
- <
- 显示成员/gh><
- 价值成员/gh>
在我的例子中,它是在设计器中设置为true
的Sorted属性。
根据文档,当将此设置为true而数据绑定打开时抛出异常,但如果在Sorted
属性设置为true
之后设置DataSource
和XMember
属性,则显然没有抛出异常;它只是默默地不起作用,你把你珍贵的头发拔出来,直到一根也不剩。
有类似的问题。尝试先分配数据源:
cbAdministrativos.DataSource = usuarios;
cbAdministrativos.DisplayMember = "dataNombre";
cbAdministrativos.ValueMember = "dataIdUsuario";
似乎当您设置DataSource属性时,ComboBox检查DisplayMember是否作为属性存在(/field?不知道,这里从来没有尝试过字段),如果没有,那么ComboBox会清除DisplayMember属性。
如果ComboBox生成一个异常(早期失败)而不是隐藏失败,效果会更好。