2008-09-22 35 views
12

Tôi có đoạn mã sau:Làm cách nào để liên kết kết quả của DataTable.Select() với điều khiển ListBox?

ListBox.DataSource = DataSet.Tables("table_name").Select("some_criteria = match") 
ListBox.DisplayMember = "name" 

Các DataTable.Select() method lợi nhuận một mảng của System.Data.DataRow đối tượng.

Không có vấn đề gì tôi chỉ định trong thuộc tính ListBox.DisplayMember, tất cả những gì tôi thấy là ListBox với số lượng mục chính xác hiển thị là System.Data.DataRow thay vì giá trị tôi muốn trong cột "name"!

Có thể liên kết với mảng kết quả từ DataTable.Select(), thay vì lặp qua nó và thêm từng cái vào ListBox?

(Tôi đã không có vấn đề với vòng lặp, nhưng dường như không phải là một kết thúc có hậu thanh lịch!)

Trả lời

33

Sử dụng một DataView để thay thế.

ListBox.DataSource = new DataView(DataSet.Tables("table_name"), "some_criteria = match", "name", DataViewRowState.CurrentRows); 
ListBox.DisplayMember = "name" 
+0

Trong hầu hết các trường hợp, bạn không thể liên kết các điều khiển tiêu chuẩn trực tiếp với một DataTable hoặc DataRow. Bạn phải lấy một DataTableView hoặc một DataRowView. Josh là chính xác. – Will

+0

Cuộc gọi tốt, cảm ơn Josh. –

+1

Câu trả lời hay, cảm ơn: o) – Andrew

1

Josh có nó đúng với DataView. Nếu bạn cần một cái búa rất lớn, bạn có thể lấy mảng của các hàng từ bất kỳ DataTable.Select ("...") và làm một hợp nhất vào một DataSet khác nhau.

 

DataSet copy = new DataSet(); 
copy.Merge(myDataTable.Select("Foo='Bar'")); 
// copy.Tables[0] has a clone 
 

Cách tiếp cận đó cho những gì bạn đang cố gắng có lẽ là quá mức cần thiết nhưng có trường hợp bạn có thể cần phải có được dữ liệu ngoài hàng loạt.

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