【问题标题】:2D array to populate combobox二维数组填充组合框
【发布时间】:2015-12-02 11:53:02
【问题描述】:

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

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

cboOption.DataSource = Options;

我尝试使用 for 循环,但它也不起作用,我收到以下错误消息:“设置 DataSource 属性时无法修改项目集合。”示例如下:

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]) });
}

我可以这样做吗?如果可以的话,你能给我举个例子吗?

谢谢

【问题讨论】:

  • 项目类型是什么?寡妇窗体、WPF、ASP.NET 或...
  • 放置 cboOption.DisplayMember = "Text"; cboOption.ValueMember = "密钥";在for之后
  • @Lidaranis 我尝试过同样的错误:“设置 DataSource 属性时无法修改项目集合。”

标签: c# arrays winforms


【解决方案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";
    }

【讨论】:

  • 哦,是的,出于某种原因,我在组合框的属性中设置了 DisplayMember 和 ValueMember,并设置了 Text 和 Key。删除它们,它工作正常。谢谢!
  • 我下次打开表单,它的 DisplayMember 设置为(无)。并抛出相同的错误消息。
  • 正如我所说,这是经过测试的。看起来您可能在表单上还有其他问题,但老实说,您找到的解决方案还是更好。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    感谢@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";
    

    【讨论】:

      猜你喜欢
      • 2016-05-27
      • 2020-08-21
      • 1970-01-01
      • 2014-09-04
      • 2019-07-05
      • 1970-01-01
      • 2014-11-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多