用于填充组合框的2D阵列

时间:2015-12-02 11:53:03

标签: c# arrays winforms

我正在尝试从2D数组填充组合框。我希望第一个维度被指定为DisplayMember值,第二个维度被指定为ValueMemeber。一直在网上看,但我找不到适合我的解决方案。下面是我尝试使用的代码。这不起作用。

string[,] Options = new string[3, 2]{
        {"Invoice", "3"},
        {"Group Invoice", "4"},
        {"Group Invoice BUCKS", "5"} };

cboOption.DataSource = Options;

我已尝试使用for循环,它也不起作用,我收到此错误消息:"设置DataSource属性时无法修改Items集合。"示例如下:

string[,] Options = new string[3, 2]{
        {"Invoice", "3"},
        {"Group Invoice", "4"},
        {"Group Invoice BUCKS", "5"} };

cboOption.DisplayMember = "Text";
cboOption.ValueMember = "Key";

for (int i = 0; i < Options.GetLength(0); i++)
{
    cboOption.Items.Add(new { Text = Options[i, 0], Key=Convert.ToInt16(Options[i, 1]) });
}

我能这样做吗?如果可以,我可以举个例子。

谢谢

4 个答案:

答案 0 :(得分:1)

你确定你已经尝试过了吗?..这是直接来自vs的粘贴,它正在工作

    private void button1_Click(object sender, EventArgs e)
    {
        string[,] Options = new string[3, 2]{
        {"Invoice", "3"},
        {"Group Invoice", "4"},
        {"Group Invoice BUCKS", "5"} };



        for (int i = 0; i < Options.GetLength(0); i++)
        {
            cboOption.Items.Add(new { Text = Options[i, 0], Key = Convert.ToInt16(Options[i, 1]) });
        }

        cboOption.DisplayMember = "Text";
        cboOption.ValueMember = "Key";
    }

答案 1 :(得分:0)

如果有控件数据绑定,则不向控件添加项,而是将它们添加到绑定数据源。而不是将项添加到cboOption.Items,而是将它们添加到控件绑定的集合中。但是,在你的情况下,你有一个数组。最好将该数组重写为可调整大小的集合或数据表。

答案 2 :(得分:0)

尝试所有不同选项后,找到了解决方案。感谢@gmiley 建议。

所以我创建了一个类而不是数组

    public class Options
    {
        public string Name { get; set; }
        public int Value { get; set; }
    }

然后我使用下面的代码填充组合框

        var items = new List<Options>
        {
            new Options() { Name="Invoice", Value=3},
            new Options() { Name="Group Invoice", Value=4},
            new Options() { Name="Group Invoice BUCKS", Value=5},
        };

        cboOption.DataSource = items;
        cboOption.DisplayMember = "Name";
        cboOption.ValueMember = "Value";

答案 3 :(得分:0)

感谢@gmiley的建议。在尝试了所有不同的选择之后,提出了一个解决方案。

所以我创建了一个类Options而不是数组

    public class Options
    {
        public string Name { get; set; }
        public int Value { get; set; }
    }

然后我使用下面的代码填充组合框

        var items = new List<Options>
        {
            new Options() { Name="Invoice", Value=3},
            new Options() { Name="Group Invoice", Value=4},
            new Options() { Name="Group Invoice BUCKS", Value=5},
        };

        cboOption.DataSource = items;
        cboOption.DisplayMember = "Name";
        cboOption.ValueMember = "Value";