2012-08-09 26 views
7

Tôi có một GridView mà tôi đã sử dụng một ObjectDataSoure làm nguồn dữ liệu. ObjectDataSource đang lấy các tham số từ một TextBox và DropDownList mà sau đó được truyền vào thủ tục được lưu trữ. Ngoài ra còn có một nút gọi là Tìm kiếm có thể được sử dụng để buộc làm mới trên GridView bằng cách cung cấp/thay đổi các giá trị trong TextBox và/hoặc DropDownList. Tuy nhiên tôi nhận thấy rằng nếu tôi thay đổi các giá trị tôi không phải bấm vào nút Tìm kiếm; chỉ cần nhấp vào GridView gây ra một ràng buộc dữ liệu.Có thể dừng ObjectDataSource khỏi tự động ràng buộc không?

Có cách nào để ngăn tác vụ này trong khi vẫn sử dụng ObjectDataSource không?

+0

Vui lòng hiển thị mã của bạn.Tôi nghĩ rằng bạn có tự động đăng lại đúng cho một trong các điều khiển của bạn. – SMK

+0

@ShoaibMuhammadKhan Cả điều khiển ObjectDataSource và GridView đều không có thuộc tính AutoPostback. TextBox và DropDownList có AutoPostback được đặt là false. –

+0

Có thể trùng lặp: http://stackoverflow.com/questions/831208/databind-and-postback http://stackoverflow.com/questions/1262220/is-this-the-only-way-we-can-force -objectdatasource-to – SMK

Trả lời

6

Khi bạn gán một DataSourceID trên GridView, lưới sẽ tự động liên kết với ObjectDataSource. Bạn có thể chỉ cần bỏ qua thuộc tính đó trên GridView và đợi cho đến khi sự kiện click của nút Search để gán nó.

+0

nhưng cách tự động đăng lại trang khi nhấp vào chế độ xem lưới? – SMK

+0

@ derek-hunziker Bạn có ý định xóa thuộc tính DataSourceID của GridView khỏi aspx và đặt nó từ mã-đằng sau không? –

+0

Đó là chính xác, loại bỏ nó khỏi trang aspx và chờ cho đến khi sự kiện bấm của bạn để gán nó trong codebehind. Nó sẽ giúp xem định nghĩa GridView của bạn cũng như DataSource của bạn. Bạn có thể đăng một số mã không? –

3

Vấn đề là mỗi lần bất kỳ tham số nào được sử dụng cho ObjectDataSource đều được thay đổi, ODS thực hiện "DataBind".

Bạn có thể sử dụng hai HiddenFields để giữ các giá trị. ObjectDataSource sẽ chỉ thực hiện một "DataBind" khi bạn thay đổi các giá trị trên HiddenFields. Vì vậy, bạn có thể thay đổi các giá trị trên TextBox và DropDownList, và khi bạn muốn có một "DataBind" bạn chỉ cần sao chép các giá trị vào HiddenFields.

Đây là một mẫu mã tôi đã thực hiện cho question khác: Q11874496WebApp.7z

+1

Cảm ơn @Hailton vì đề xuất của bạn. Tôi cảm thấy hơi miễn cưỡng khi sử dụng các trường ẩn nữa vì tôi đã sử dụng khá một chút. Tuy nhiên nếu xấu đến tồi tệ hơn tôi có thể sẽ sử dụng này, sau đó người ta có thể tranh luận có bao nhiêu sự khác biệt là một vài bổ sung của các lĩnh vực ẩn sẽ làm cho ... phải không? –

1

Trong trường hợp của tôi, tôi chỉ sử dụng một lĩnh vực boolean tin trong codebehind và tôn trọng giá trị của nó đối với sự kiện datasourceName_Selecting.

Ví dụ tôi tuyên bố như sau:

private bool IsInSearchingMode = false; 

bộ nó chỉ đúng trong chế độ tìm kiếm:

protected void btnSearch_Click(object sender, EventArgs e) 
    { 
     this.IsInSearchingMode = true; 
     this.gridData.DataBind(); 
    } 

và sau đó kiểm tra giá trị về Lựa chọn sự kiện:

 protected void myLinqDataSource_Selecting(object sender, LinqDataSourceSelectEventArgs e) 
     { 
      e.Result = new List<BranchDataClass>(); 
      if (!this.IsInSearchingMode) 
       return; 

// e.result = select code 
} 

Một nhược điểm là một page_load mới không phải do btnSearch_Click sẽ đặt lại giá trị của biến riêng. Nếu bạn muốn nó được liên tục, bạn nên sử dụng một lĩnh vực ẩn như đề xuất hoặc lưu nó vào ViewState.

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