2009-05-06 39 views
6

Đây là cách chung DataBind làm việc như thế nào ...DataBind và Postback

Tôi có một trang đơn giản với GridView bị ràng buộc (trong mã aspx) đến một ObjectDataSource.

Tôi có thể tìm trong hàm Select() được gọi bởi ObjectDataSource để thấy rằng nó được gọi trên tải ban đầu và trên mỗi bài đăng trở lại. Tôi có một số logic xảy ra trên lưng bài đó sẽ ảnh hưởng đến dữ liệu của GridView, và tôi muốn gọi GridView.DataBind() sau này trong bài viết trở lại, sau khi tôi đã thực hiện một số thay đổi.

Có cách nào để ngăn việc tự động rebinding xảy ra trên mỗi bài đăng không? Điều này có nghĩa là tôi không thể sử dụng một ObjectDataSource cho điều khiển này?

Trả lời

12

Bạn chính xác ở chỗ kiểm soát hạt mịn mà bạn đang tìm kiếm là không thể và yêu cầu mã phía sau. Các đối tượng nguồn dữ liệu của ASP.NET không là gì ngoài một nỗi đau trong **. Bạn sẽ thấy rằng khi bạn sử dụng chúng, bạn sẽ nhận được các tình huống như thế này xén lên một lần nữa và một lần nữa.

Một số trong những vấn đề bạn sẽ tìm thấy là:

  • Không gõ mạnh
  • không linh hoạt (như bạn đã lưu ý)
  • Muddy lên mã trình bày

tôi đã thực hiện tất cả truy cập dữ liệu trong đoạn mã phía sau và chưa xem xét lại.

2

Có. Nếu bạn muốn loại điều khiển đó khi databinding xảy ra, bạn cần thực hiện điều đó trong đoạn mã phía sau.

8

tôi đã chiến đấu với tự động ràng buộc này là tốt và nghĩ rằng tôi gửi giải pháp của tôi ở đây:

  1. loại bỏ các "DataSourceID" từ trang ASPX, khi nó không được thiết lập, không có tự động ràng buộc
  2. bộ DataSourceID trong CodeBehind chỉ khi DataBinding là cần thiết: myGridView.DataSourceID = "MyDataSource";
  3. không gọi myGridView.DataBind() một cách rõ ràng, liên kết dữ liệu tự động xảy ra tại PreRender

Đã cho tôi một thời gian để con số này ra, nhưng bây giờ wverything hoạt động tốt.

Context

tôi sử dụng ObjectDataSource vì nó Handels tất cả các phân trangsắp xếp của GridView tự động đối với tôi. Tôi đang sử dụng một lớp dữ liệu với Linq2SQL và sử dụng các phương thức Skip() và Take() của nó để chỉ tải lượng dữ liệu cần thiết để điền một trang của GridView.

Sử dụng SelectMethodSelectCountMethod của ObjectDataSource

+0

Cảm ơn đã gợi ý. Tôi đã đi với đề nghị của Gavin chỉ để tránh lộn xộn. Công ty của tôi đã chuyển sang Telerik hỗ trợ một phương pháp ràng buộc mã thực sự sạch sẽ được gọi là "NeedDataSource".Tuy nhiên, nếu tôi cần phải quay trở lại, tôi sẽ thử. –

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