我正在尝试从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]) });
}
我能这样做吗?如果可以,我可以举个例子。
谢谢
答案 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";