2009-07-13 40 views
24

Toàn bộ mục đích của điều khiển ASP.NET FormView là hiển thị một bản ghi duy nhất tại một thời điểm. Vì vậy, làm thế nào để tôi ràng buộc nó vào một kỷ lục duy nhất? Nó khiếu nại rằngLàm thế nào để liên kết một FormView ASP.NET với một bản ghi duy nhất?

Nguồn dữ liệu là loại không hợp lệ. Nó phải là một IListSource, IEnumerable, hoặc IDataSource.

Tôi có thể bọc đối tượng trong danh sách nếu đó là giải pháp duy nhất. Trong ứng dụng này, FormView nằm bên trong một điều khiển người dùng và tôi đang lấy đối tượng trong một phương thức công khai, tức là tôi không sử dụng điều khiển nguồn dữ liệu. Tôi không thực hiện bất kỳ ràng buộc dữ liệu 2 chiều nào ở đây, tôi chỉ sử dụng FormView trong trường hợp này để duy trì giao diện nhất quán.

Nếu tôi đi qua cuốn sách và ràng buộc FormView vào nguồn dữ liệu trả về danh sách các bản ghi, nó có thực sự truy xuất tất cả các bản ghi và chỉ hiển thị bản ghi đã chọn không?

Đây là những gì tôi đã kết thúc thực hiện trong một lớp tiện ích:

public static IEnumerable<T> WrapInEnumerable<T>(T item) 
{ 
    return new T[] {item}; 
} 
+0

Khi tôi cố thực hiện điều này trên thực thể Linq2Sql của tôi, nó vẫn ném lỗi khi c asting nó vào một mảng. Tôi đã thử ý tưởng của List <> của Sani Huttunen và nó đã hoạt động. – rtpHarry

+1

GOTCHA: Nếu bạn đặt thủ công thuộc tính .DataSource thì đừng quên .DataBind() trên dòng tiếp theo! Còn lại tôi gãi đầu trong vài phút khi tôi không gặp lỗi nhưng không có dữ liệu nào được hiển thị. Rõ ràng trong hindsight, nhưng tôi thường sử dụng ObjectDataSource vì vậy nó đã không instictive cho tôi – rtpHarry

+1

Tôi chỉ sử dụng bản thân mình với một sự khác biệt nhỏ. Tôi đã chuyển sang phương thức mở rộng bằng cách thay đổi 'T mục' thành' mục T này'. Cảm ơn bạn vì ý tưởng tuyệt vời với điều này. – Kirk

Trả lời

18

Như thông báo lỗi cho biết, đối tượng DataSource phải thực hiện IListSource, IEnumerable hoặc IDataSource để làm việc.

Nếu bạn có một đối tượng av loại A mà không thực hiện một trong các giao diện đề cập sau đó bạn có thể như bạn nói bọc đối tượng của bạn trong một danh sách:

C#

var myDataSource = new List<A> {myObject}; 

VB .NET

Dim myDataSource As List(Of A)(myObject) 
+2

Cảm ơn bạn đã xác nhận. Đó là một chút ngụy trang như một câu hỏi. Không phải là nó tạo ra một sự khác biệt lớn với một mục, nhưng gói nó trong một mảng có lẽ hiệu quả hơn. –

+8

Đồng ý với rant. Điều này là câm. Điều khiển được thiết kế để hiển thị một mục duy nhất, bạn sẽ có thể liên kết trực tiếp đối tượng. –

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