是否有可能将列表框数据源设置为List > Item1 only?

问题描述:

是否有可能将列表框数据源设置为List <Tuple <string,string,int >> Item1 only?

public static class GlobalVariables 
{ 
    public static List<Tuple<string, string, int>> PopFile; 
} 

,我试图用PopFile作为数据源,以列表框

listBox1.DataSource = GlobalVariables.PopFile; 

的问题是,它显然增加了([字符串],[串],[INT] )到列表框,但我想只添加元组的第一项。那可能吗?

我可以用

foreach (Tuple<string, string, int> i in GlobalVariables.PopFile) 
{ 
    listBox1.Items.Add(i.Item1); 
} 

,但我宁愿.DataSource。

+0

这是ASP.NET的WebForms或WinForms的?使用'ListBox.DisplayMember'属性。 – Dai

listBox1.DataSource = GlobalVariables.PopFile; 
listBox1.DisplayMember = "Item1"; 
listBox1.ValueMember = "Item3"; // optional 

https://msdn.microsoft.com/en-us/library/system.windows.forms.listcontrol.datasource

最后,你不能真正避免循环,要么从你的元组对象单独添加数据,要么创建一个新的对象绑定到列表框。

Listbox根本没有输入参数来接收元组对象,除非您自己扩展Listbox对象以便能够适当地处理它,但即使如此,您仍然必须执行与上面的循环类似的操作。

LINQ可能会派上用场......

listBox1.DataSource = GlobalVariables.PopFile.Select(t => t.Item1).ToList() 
+0

List对于'.PopFile.ConvertAll(t => t.Item1)有更高效的方法;'' – Slai