2011-02-02 87 views
20

Tôi đã sử dụng một CheckedListBox trên WinForm của tôi trong C#. Tôi đã chặn điều khiển này như được hiển thị bên dưới -Cách lấy giá trị của mục đã chọn từ CheckedListBox?

chlCompanies.DataSource = dsCompanies.Tables[0]; 
chlCompanies.DisplayMember = "CompanyName"; 
chlCompanies.ValueMember = "ID"; 

Tôi có thể lấy chỉ mục của các mục đã chọn, nhưng làm cách nào tôi có thể nhận được văn bản và giá trị đã chọn. Thay vì làm thế nào tôi có thể liệt kê thông qua CheckedItems truy cập văn bản và giá trị?

Cảm ơn bạn đã chia sẻ thời gian của mình.

Trả lời

25

Cast nó trở lại kiểu ban đầu của nó, đó sẽ là một DataRowView nếu bạn đang ràng buộc một bảng, và sau đó bạn có thể nhận được Id và Văn bản từ các cột thích hợp:

foreach(object itemChecked in checkedListBox1.CheckedItems) 
{ 
    DataRowView castedItem = itemChecked as DataRowView; 
    string comapnyName = castedItem["CompanyName"]; 
    int? id = castedItem["ID"]; 
} 
+0

Bạn tôi, tôi nghĩ rằng bạn đã không đi sâu với câu hỏi của tôi. Tôi đang sử dụng CheckedListBox. Tôi không cần bất kỳ lựa chọn, thay vào đó tôi muốn kiểm tra các mặt hàng. Thuộc tính chỉ cung cấp giá trị của mục đã chọn. – IrfanRaza

+0

Trình biên dịch tạo ra thông báo lỗi trên SelectedValue. – IrfanRaza

+0

@ w69rdy: Thuộc tính 'CheckedItems' là một mảng' đối tượng'. Một 'đối tượng' không có thuộc tính' SelectedValue', chúng có thể là bất cứ thứ gì. –

7

Bạn có thể lặp qua các CheckedItems tài sản:

foreach(object itemChecked in checkedListBox1.CheckedItems) 
{ 
    MyCompanyClass company = (MyCompanyClass)itemChecked;  
    MessageBox.Show("ID: \"" + company.ID.ToString()); 
} 

http://msdn.microsoft.com/en-us/library/system.windows.forms.checkedlistbox.checkeditems.aspx

+0

Cảm ơn Evan! Nhưng câu hỏi của tôi là làm thế nào để có được ID liên kết của mục được chọn? – IrfanRaza

+0

@IrfanRaza: Xem mẫu mã đã chỉnh sửa của tôi. Bạn sẽ cần phải đúc từng mục đã được chọn cho loại dữ liệu tùy chỉnh của bạn để truy cập các thuộc tính cụ thể của nó. –

12

EDIT: Tôi nhận ra hơi muộn rằng nó đã bị ràng buộc vào một DataTable. Trong trường hợp đó, ý tưởng là như nhau và bạn có thể truyền tới một số DataRowView sau đó lấy thuộc tính để nhận số DataRow nếu bạn muốn làm việc với lớp đó.

foreach (var item in checkedListBox1.CheckedItems) 
{ 
    var row = (item as DataRowView).Row; 
    MessageBox.Show(row["ID"] + ": " + row["CompanyName"]); 
} 

Bạn sẽ cần phải cast hoặc phân tích các mục tương đương gõ mạnh của họ, hoặc sử dụng không gian tên System.Data.DataSetExtensions sử dụng DataRowExtensions.Field method chứng minh dưới đây:

foreach (var item in checkedListBox1.CheckedItems) 
{ 
    var row = (item as DataRowView).Row; 
    int id = row.Field<int>("ID"); 
    string name = row.Field<string>("CompanyName"); 
    MessageBox.Show(id + ": " + name); 
} 

Bạn cần phải cast mục để truy cập các thuộc tính của lớp học của bạn.

foreach (var item in checkedListBox1.CheckedItems) 
{ 
    var company = (Company)item; 
    MessageBox.Show(company.Id + ": " + company.CompanyName); 
} 

Cách khác, bạn có thể sử dụng phương pháp OfType mở rộng để có được mạnh mẽ gõ kết quả trở lại mà không cần đúc một cách rõ ràng trong vòng lặp:

foreach (var item in checkedListBox1.CheckedItems.OfType<Company>()) 
{ 
    MessageBox.Show(item.Id + ": " + item.CompanyName); 
} 
+1

Câu trả lời hay! – MiBol

-2

Bạn có thể thử này:

string s = ""; 

foreach(DataRowView drv in checkedListBox1.CheckedItems) 
{ 
    s += drv[0].ToString()+","; 
} 
s=s.TrimEnd(','); 
+0

Chào mừng bạn đến với SO, Madhuchhanda. Câu trả lời của bạn khác nhau như thế nào so với các câu trả lời khác đã được cung cấp? Tốt nhất là không cung cấp câu trả lời trùng lặp vì nó chỉ làm tăng thêm tiếng ồn và làm cho nó trở nên khó hiểu hơn đối với những người tìm kiếm trợ giúp. –

0

Egypt Development Blog : Get value of checked item in CheckedListBox in vb.net

sau bind CheckedListBox với dữ liệu bạn có thể nhận được giá trị các mặt hàng kiểm tra

For i As Integer = 0 To CheckedListBox1.CheckedItems.Count - 1 
        Dim XDRV As DataRowView = CType(CheckedListBox1.CheckedItems(i), DataRowView) 
        Dim XDR As DataRow = XDRV.Row 
        Dim XDisplayMember As String = XDR(CheckedListBox1.DisplayMember).ToString() 
        Dim XValueMember As String = XDR(CheckedListBox1.ValueMember).ToString() 
        MsgBox("DisplayMember : " & XDisplayMember & " - ValueMember : " & XValueMember) 
Next 

bây giờ bạn có thể sử dụng các giá trị hoặc hiển thị các hạng mục kiểm tra trong CheckedListBox từ XDisplayMember biến 2 Và XValueMember trong vòng lặp

hy vọng có ích.

0
foreach (int x in chklstTerms.CheckedIndices) 
{ 
    chklstTerms.SelectedIndex=x; 
    termids.Add(chklstTerms.SelectedValue.ToString()); 
} 
-1

thử:

foreach (var item in chlCompanies.CheckedItems){ 
    item.Value //ID 
    item.Text //CompanyName 
    } 
+0

bạn nên thêm một chút mô tả về mã. Bạn cũng bị thiếu dấu chấm phẩy trong mã của mình. –

0

Để có được mục tất cả các lựa chọn trong một CheckedListBox thử điều này:

Trong giá trị trường hợp ths đây là một chuỗi nhưng nó chạy với các loại khác của đối tượng:

for (int i = 0; i < myCheckedListBox.Items.Count; i++) 
{ 
    if (myCheckedListBox.GetItemChecked(i) == true) 
    { 

     MessageBox.Show("This is the value of ceckhed Item " + myCheckedListBox.Items[i].ToString()); 

    } 

} 
Các vấn đề liên quan