Tôi muốn chuyển một giá trị trong một hộp tổ hợp như một tham số cho một câu lệnh SQL. Các combobox Winforms cho tôi một số tùy chọn để lấy giá trị, cụ thể là SelectedItem, SelectedText, và SelectedValue. Cái nào là tốt nhất/an toàn nhất để sử dụng trong trường hợp này?Tôi có nên sử dụng SelectedBoxem của một combobox, SelectedText hoặc SelectedValue không?
Trả lời
Đã chọnValue có lẽ là cách tốt nhất để sử dụng
SelectedText sẽ cung cấp cho bạn văn bản đã chọn của phần có thể chỉnh sửa, Mục đã chọn sẽ trả lại cho bạn đối tượng và chỉ mục đã chọn sẽ trả về chỉ mục. Thông thường cho các ứng dụng SelectedValue được trích xuất và sử dụng. Kiểm tra Combobox from MSDN
SelectedIndex Gets or sets the index specifying the currently selected item. (Overrides ListControl.SelectedIndex.)
SelectedItem Gets or sets currently selected item in the ComboBox.
SelectedText Gets or sets the text that is selected in the editable portion of a ComboBox.
SelectedValue Gets or sets the value of the member property specified by the ValueMember property. (Inherited from ListControl.)
Cuối cùng tôi đã thử nghiệm điều này; khi tôi thử SelectedValue, nó bị đánh bom. SelectedItem hoạt động, mặc dù: // Chuỗi Trung tâm = comboBoxCenters.SelectedValue.ToString(); <- err msg về đối tượng không được instantiated (và có, nó là null khi tôi bước qua nó) String Center = comboBoxCenters.SelectedItem.ToString(); // <- Điều này hoạt động tốt –
if (comboBox1.DropDownStyle == DropDownStyle.DropDown ||
comboBox1.DropDownStyle == DropDownStyle.Simple)
{
return comboBox1.Text;
}
Text
có lẽ là cách tốt nhất để sử dụng. Điều này được bất cứ điều gì là văn bản hiện đang được chọn từ ComboBox như một chuỗi.
if (comboBox1.DropDownStyle == DropDownStyle.DropDownList)
{
return comboBox1.GetItemText(comboBox1.SelectedItem);
}
Đối với kiểu này, bạn không thể lấy văn bản từ ComboBox
. Điều này trả về chuỗi từ mục tại hiện tại SelectedIndex
thay thế.
SelectedItem có vẻ là một lựa chọn an toàn.
Tôi có mã này:
NRBQConsts.currentSiteNum = listBoxSitesWithFetchedData.SelectedValue.ToString();
... mà đâm với một TN & MT.
Sau khi thay đổi nó như thế này:
NRBQConsts.currentSiteNum = listBoxSitesWithFetchedData.SelectedItem.ToString();
... nó hoạt động tốt.
Nó phụ thuộc vào 3 điều 1. Chế độ 2. DropDownStyle 3. buộc Value
On ComboBox.SelectedIndexChanged
Unbound Chế độ
a. DropDownStyle = thả xuống
- SelectedItem sẽ trở lại = SelectedText
- SelectedValue sẽ trở lại = ""
SelectedText sẽ trở lại = SelectedText
b.DropDownStyle = DropDownList
- SelectedItem sẽ trở lại = SelectedText
- SelectedValue sẽ trở lại = ""
- SelectedText sẽ trở lại = ""
Sử dụng dữ liệu ràng buộc Chế độ (Phương tiện bạn đang điền vào ComboBox của bạn từ một số nguồn dữ liệu tức là Bảng SQL Server) Bạn sẽ chọn một Cột của bảng là DisplayMember và cùng cột hoặc cột khác với ValueMember.
a. DropDownStyle = thả xuống
- SelectedItem sẽ trở lại = System.Data.DataRowView (Prompt)
- SelectedValue sẽ trở lại = Giá trị của ValuMemeber
SelectedText sẽ trở lại = SelectedText (Giá trị của DisplayMember)
b . DropDownStyle = DropDownList
- .SelectedItem sẽ trở lại = System.Data.DataRowView (Prompt)
- .SelectedValue sẽ trở lại = Giá trị của ValueMember
- .SelectedText sẽ trở lại = ""
Lưu ý: Bạn cũng có thể sử dụng .Text sẽ trả về = Văn bản của ComboBox
Kết luận:
Unboud Chế độ
- .SelectedItem là sự lựa chọn tốt nhất
dữ liệu ràng buộc Chế độ
a. ValueMember cần
.SelectedValue là sự lựa chọn tốt nhất
b. DisplayMember cần
- .text là sự lựa chọn tốt nhất
giá trị cho tài sản DropDownStyle là gì? –