C#我可以将字典中的对象属性显示为ListControl.DisplayMember吗?

时间:2013-04-04 17:25:18

标签: c# dictionary listcontrol

目的是将列表视为“名称”的列表。

这是字典:

class Scripts
    {
        public Dictionary<int, Script> scripts = new Dictionary<int, Script>();
        ...
    }

这是我追求的属性'name':

class Script
    {
        public string name { get; set; }
        ...
    }

这就是问题所在:

public partial class MainForm : Form
{
    Scripts allScripts;

    public MainForm()
    {
        InitializeComponent();
        allScripts = new Scripts();
        setupDataSources();
    }

    private void setupDataSources()
    {
        BindingSource ketchup = new BindingSource(allScripts.scripts, null);
        //THIS LINE:
        listBoxScripts.DisplayMember = allScripts.scripts["Key"].name.ToString();
        listBoxScripts.ValueMember = "Key";
        listBoxScripts.DataSource = ketchup;
    }
    ...
}

我只是想不出如何使这条线工作!非常感谢您的建议!

由于

3 个答案:

答案 0 :(得分:3)

您可以绑定到Value并覆盖ToString类中的Script方法。

private void setupDataSources()
{            
    BindingSource ketchup = new BindingSource(allScripts.scripts, null);
    listBoxScripts.DisplayMember = "Value";
    listBoxScripts.ValueMember = "Key";
    listBoxScripts.DataSource = ketchup;            
}

脚本类:

class Script
{
    public string name { get; set; }

    public override string ToString()
    {
        return name;
    }
}

答案 1 :(得分:0)

您将'name'的实际设置为DisplayMember,因此除非您随机获取'name'中的值设置为与属性相同的文本,否则您永远不会得到它显示出来了。

你做得更好:

listBoxScripts.DisplayMember = "name";

当然?

答案 2 :(得分:0)

尝试将词典元素转换为脚本对象

listBoxScripts.DisplayMember = ((Script)allScripts.scripts["Key"]).name.ToString();