解析变量字符串

时间:2012-07-16 15:00:37

标签: c# combobox string-parsing

我在ComboBox中有一些项目。每个项目都有一个ID和一个名称。

     ______________
    │_____________▼│
    │111  Simon    │              
    │222  Patrick  │              
    │3333 John     │
    │155555 Ted    │
    └──────────────┘

我需要将所选项的Id传递给存储过程。我必须Parse项目的一部分才能获得ID。我的问题是,当我不知道Id的长度时,我怎么能这样做。 (它可以是1到100个字符)。

4 个答案:

答案 0 :(得分:3)

您可以拆分空格字符并获取第一个结果:

var id = comboBox.SelectedText.Split(' ')[0]; // Using array index
var id = comboBox.SelectedText.Split(' ').First(); // Using LINQ

暂且不说:

  • 如果使用移动框架ComboBox类,我建议使用ValueMember属性来存储ID,然后使用它而不是仅使用显示的文本。
  • 如果使用System.Windows.Forms ComboBox,您可以使用SelectedItem属性访问该ID。
  • 如果使用System.Windows.Controls 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属性中(无需解析任何内容)。看看你的列表框实现是否不支持它。

祝你好运!