日期:2014-05-20  浏览次数:21183 次

如何让combobox 显示格式为[ID]NAME
平时我们用:
this.combobox.ValueMember   =   "ID ";
this.combobox.DisplayMember   =   "NAME ";  
绑定数据
但combobox只能显示NAME,不能ID,NAME同时显示
如果我想显示效为:[ID]NAME,该如何做啊?在线等....

------解决方案--------------------
处理一下数据源,把ID和Name合成一个字段
------解决方案--------------------
查询数据库的时候做处理

select ID,ID+Name as NAME from table
------解决方案--------------------
定义一个CboItem类做为ComboBox的Item的元素:
public class CboItem
{
private object m_id;
private string m_Name;
public object ID
{
get
{
reutrn this.m_id;
}
}
public string Name
{
get
{
reutrn this.m_Name;
}
}
public CboItem(object id, string name)
{
this.m_id = id;
this.m_Name = name;
}
protedted override string ToString()
{
return string.Format( "[{0}]{1} ", this.m_id, this.m_Name);
}
}

然后每当向ComboBox添加一项的时候都生成这个类的实例添加到ComboBox就可以了.
//这样添加一项.
CboItem item= new CboItem(1, "text ");
this.comboBox.Items.Add(item);
//这样取值.
CboItem item = this.comboBox1.Items[this.comboBox1.SelectedIndex] as CboItem;
item.ID;
item.Name;
------解决方案--------------------
如果你的数据源是从数据库来的那么你最好增加一列把id和name和气来放在里面。
但是这种不是好办法,.net所有的这种列表性的控件都支持数据源邦定从数据对象列表里。
据个例子就是你可以
int[] intarry = new int[3]{1,2,3};
listBox1.DataSource = intarry;
这样也是可以的。
然后再告诉你一点为什么 listbox会显示1,2,3呢?因为它执行了对象的tostring()方法。
好了,最后就看你怎么封装你的数据源了。
------解决方案--------------------
1、在SQL语句中处理。ID连接Name
2、在内存表中处理。重组字段
------解决方案--------------------
select str(Line.ID)+ ' ' +Line.Name from Line