Câu hỏi Làm thế nào để deleselect / blank một ComboBox databound? SelectedIndex = -1 không hoạt động


Tôi đang cố gắng bỏ chọn (bỏ trống) một số hộp tổ hợp trong ứng dụng biểu mẫu cửa sổ của tôi. Trong ứng dụng của tôi, tôi có một phương pháp Reset để thiết lập SelectedIndex cho mỗi combo thành -1. Tất cả các hộp kết hợp của tôi đều là databound, tức là mỗi hộp kết hợp được điền bằng cách sử dụng nguồn dữ liệu.

Tôi đã nhận thấy rằng đôi khi phương pháp Đặt lại của tôi hoạt động, nghĩa là phương thức này sẽ bỏ chọn mục hiện được chọn và tô trắng kết hợp. Tuy nhiên, những lúc khác, nó chọn mục đầu tiên (SelectedIndex = 0) ngay sau khi tôi cố gắng đặt nó thành -1. Từ quan điểm của người dùng, điều này trông giống như một lỗi vì nó không phải lúc nào cũng "xóa" biểu mẫu.

Theo MSDN:

"Để bỏ chọn mục hiện đang được chọn, đặt SelectedIndex thành -1. Bạn không thể đặt SelectedIndex của một mục ComboBox thành -1 nếu mục đó là một mục bị ràng buộc dữ liệu."

Có ai biết về một công việc xung quanh?

Cảm ơn nhiều


8
2018-05-03 07:44


gốc


Đây là một chủ đề cũ, nhưng kể từ khi tôi chỉ cố gắng tìm ra điều này và tìm thấy điều này, tôi sẽ thêm nó ở đây. Hành vi này là một lỗi theo MS: support.microsoft.com/en-us/help/327244/… - CuppM


Các câu trả lời:


Sử dụng kết hợp khoảng trống và thuộc tính

comboBox.ResetText();

 //to reset selected value
comboBox.SelectedIndex = -1;

19
2017-12-01 19:22



Đã làm cho tôi. Cảm ơn. - Thom Ash
Cho tôi ResetText() đã đủ. Có lý do để thiết lập không SelectedIndex đến -1? - Tpx
có một lý do bởi vì nếu bạn sử dụng nguồn ràng buộc với backgroundworker cập nhật GUI sau khi kết xuất như vậy sau khi ràng buộc sẽ xóa văn bản mà không có giá trị còn lại cho rằng bạn sẽ cần phải sử dụng cả hai - Hisham


Bạn có thể thử đặt Giá trị hoặc Mục đã Chọn thành null (Nothing trong VB)

Tôi không thể nhớ được hành vi ném một ngoại lệ. Tuy nhiên, tôi nhớ rằng tôi đã sử dụng để chèn một giá trị được gọi là -1, (Không) vào hộp tổ hợp sau khi nó được databounded thường thông qua các sự kiện databind. Tôi khuyên bạn nên lấy dữ liệu trong Danh sách và chèn giá trị mới vào danh sách này. Liên kết kết hợp với Danh sách ngay bây giờ.


2
2018-05-03 07:52



SelectedItem, Vâng. Tuy nhiên, nếu bạn đặt SelectedValue null (và ComboBox là dữ liệu bị ràng buộc) nó sẽ ném một ngoại lệ. - Bradley Smith
Cộng với nó không phải là một ý tưởng tốt để ràng buộc với anyways dữ liệu trực tiếp. Luôn truy xuất dữ liệu trong Danh sách cục bộ và liên kết với Danh sách. Hy vọng bạn đang sử dụng LINQ. - Hassan Gulzar
Đặt nó SelectedValue đã ném một ngoại lệ, SelectedIndex = null làm việc, tuy nhiên trên một combobox cụ thể (thả xuống) tôi đã phải làm điều này hai lần, đó là khá kỳ lạ. Tôi không chắc tại sao? Ngoài ra tôi không sử dụng LINQ, dự án của tôi phải là .net 2 - bobbo
Khi bạn nói hai lần, ý bạn là sao? Giống như viết dòng hai lần, một cái sau cái kia? - Hassan Gulzar


Chỉ có mã sau hoạt động cho tôi, vì vậy hãy thử:

comboBox.ResetText();   //framework  4.0 

1
2017-08-27 16:13





Thử gán null hoặc là String.Empty đến SelectedValue bất động sản.


0
2018-05-03 07:52





Nếu khung mục tiêu của bạn là 4.0 - đây là giải pháp:

Cài đặt .Net Framework 4.5 (không thay đổi khung đích của dự án của bạn, chỉ cần cài đặt khung công tác). Sau khi cài đặt, dòng đó bỏ chọn combobox databound:

combobox.SelectedValue = 0;

Thành viên giá trị của tôi là "Id" int auto key increment, do đó trường đó không chứa giá trị 0. Tuy nhiên, điều đó sẽ không hoạt động trên các phiên bản Windows, mà không hỗ trợ .net45


0
2017-10-21 06:15





Hãy thử đặt [ComboBoxObj] .SelectedIndex = -1; sẽ làm cho giá trị trống. -1 đề cập đến bỏ chọn hoặc vô hiệu hóa giá trị của combobox

Cảm ơn


0
2017-12-05 10:09





Tôi đã gặp vấn đề này một thời gian, nhưng nếu bạn sử dụng:

'ComboBox.ResetText ();'

nó sẽ làm cho văn bản "" và để các mục trong hộp tổ hợp không bị ảnh hưởng.

tôi đã sử dụng mã sau trong ứng dụng của mình

 private void UpdateComboBox(ComboBox Box, string Group, List<string> Numbers)
        {
              Box.Items.Clear();
              Box.BeginUpdate();            
              Box.Items.Add("<<Add Contact>>");
              foreach (string item in Numbers)
              {
                   if(item != "")
                        Box.Items.Add(item);
              }
          Box.EndUpdate();
          Box.ResetText();
        }

Vì vậy, tôi chạy phương pháp cuối cùng, một khi tất cả các mục nằm trong hộp combo.


0
2018-01-07 09:37