2012-07-16 78 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屬性中(不需要解析任何內容)。看看你的列表框實現不支持。

祝你好運!