2

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

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

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

4

4 回答 4

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属性访问 ID。
于 2012-07-16T15:03:51.947 回答
3

您必须将项目填充到组合框中,以便:

comboboxName.DataSource = ds;
comboboxName.ValueMember = "Id";
comboboxName.DisplayMember = "Name";

否则用于comboboxName.SelectedText.Split(' ');获取这些值。

于 2012-07-16T15:03:52.690 回答
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
于 2012-07-16T15:04:07.120 回答
0

在选定的响应上尝试 String.Split。这将在空格处拆分所选项目的文本。您应该得到一个二元素数组,第一个成员是您在上面表示的 id。

不过,更广泛地说,您可能会考虑修改解决方案以将值放在 .ValueMember 属性中,并将名称放在 .DisplayMember 属性中(无需解析任何内容)。看看你的列表框实现是否不支持。

祝你好运!

于 2012-07-16T15:04:49.357 回答