我在ComboBox中有一些项目。每个项目都有一个ID和一个名称。
______________
│_____________▼│
│111 Simon │
│222 Patrick │
│3333 John │
│155555 Ted │
└──────────────┘
我需要将所选项的Id传递给存储过程。我必须Parse
项目的一部分才能获得ID。我的问题是,当我不知道Id的长度时,我怎么能这样做。 (它可以是1到100个字符)。
答案 0 :(得分:3)
您可以拆分空格字符并获取第一个结果:
var id = comboBox.SelectedText.Split(' ')[0]; // Using array index
var id = comboBox.SelectedText.Split(' ').First(); // Using LINQ
暂且不说:
ComboBox
类,我建议使用ValueMember属性来存储ID,然后使用它而不是仅使用显示的文本。ComboBox
,您可以使用SelectedItem属性访问该ID。ComboBox
,您可以使用SelectedItem proeprty访问该ID。答案 1 :(得分:3)
您必须将项目填充到组合框中,以便:
comboboxName.DataSource = ds;
comboboxName.ValueMember = "Id";
comboboxName.DisplayMember = "Name";
否则使用comboboxName.SelectedText.Split(' ');
来获取这些值。
答案 2 :(得分:1)
试试这个:
var foo = str.Split(' '); //from 111 Simon will get '111'
var id = foo.Length > 1 ? foo[0] : null;
if(id != null) {
//do something with '111';
} else {
//error
}
修改强>
我建议您使用自定义Combobox
类来执行此操作:
public class Foo
{
public string Text { get; set; }
public int Value { get; set; }
public Foo(int id, string name)
{
Value = id;
Text = name;
}
public override string ToString()
{
return Text;
}
}
然后将object
(foo)添加到combobox
:
comboBox1.Items.Add(new Foo(111, "simon"));
然后您可以通过将SelectedItem
属性转换为您的类来访问这些值:
//assuming that comboBox1.SelectedText is "simon", the following is true:
var val = (Foo)comboBox1.SelectedItem;
val.Value // 111
val.Text // simon
答案 3 :(得分:0)
在选定的响应上尝试String.Split。这将在空间中分割所选项目的文本。你应该得到一个双元素数组,第一个成员是你在上面代表的id。
但更广泛地说,您可以考虑修改解决方案以将值放在.ValueMember属性中,并将名称放在.DisplayMember属性中(无需解析任何内容)。看看你的列表框实现是否不支持它。
祝你好运!