2012-07-16 80 views
2

我在ComboBox中有一些项目。每个项目都有一个ID和一个名称。解析变量字符串

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

我需要将所选项目的ID传递给存储过程。我将不得不Parse项目的一部分,以获得唯一的ID。我的问题是,当我不知道身份证的长度时,我该如何做到这一点。 (可以从1到100个字符)。

+0

'comboBox1.SelectedText.Split('')' – 2012-07-16 15:01:34

+1

这会返回什么? mySplit [0] = 111和mySplit [1] = Simon? – phadaphunk 2012-07-16 15:02:49

+0

是的,它会........... – 2012-07-16 15:04:09

回答

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来访问该标识。
+0

不错,我喜欢这种方法,我现在就试试。 – phadaphunk 2012-07-16 15:05:24

+0

我尝试了两种方法,但我得到一个空字符串。任何想法为什么? – phadaphunk 2012-07-16 15:14:20

+0

该字符串为空,如果我将索引更改为[1],我会得到一个超出范围的异常。我应该得到像西蒙这样的名字。 – phadaphunk 2012-07-16 15:19:21

3

你必须填写的项目到组合框,以便:

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

否则使用comboboxName.SelectedText.Split(' ');得到这些值。

+0

您能解释第一个解决方案的工作原理吗?谢谢:) – phadaphunk 2012-07-16 15:13:48

+0

同样在这里第二个解决方案返回一个空字符串。任何想法为什么? – phadaphunk 2012-07-16 15:16:58

+0

@PhaDaPhunk,而不是用'111西蒙│222帕特里克│3333约翰等填充你的组合框,你应该填充它,以便你有一个ID和名称列表,然后将它绑定到组合框的数据源属性,正如我在[这个答案](http://stackoverflow.com/questions/11503240/how-to-add-value-into-my-combobox-options-in-c/11503342#11503342)。 – 2012-07-16 15:25:08

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(富)为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 
+0

也许有足够的错误检查来防止失败?也许是第一次分裂而不是第二次分裂? – 2012-07-16 15:05:33

+0

TetsujinnoOni:感谢您的评论。我把它弄了。 ;) – Jack 2012-07-16 15:18:29

0

尝试String.Split。这将在该空间拆分选定项目的文本。你应该得到一个两元素的数组,第一个成员是你在上面代表的id。但是,更广泛地说,您可能会考虑修改解决方案以将值放入.ValueMember属性中,并将名称放在.DisplayMember属性中(不需要解析任何内容)。看看你的列表框实现不支持。

祝你好运!