2013-05-26 48 views
12

Tôi muốn để ràng buộc danh sách các nhân viên trong danh sách thả xuống, với tính năng tự động hoàn vì vậy người dùng có thể tìm kiếm tên riêng .Tôi sử dụng RadComboBoxRàng buộc số lượng lớn dữ liệu vào hộp tổ hợp?

Tôi có hai vấn đề chính:

1- Danh sách này là quá lớn về 5000 item.so ràng buộc số lượng lớn dữ liệu này trong trình duyệt làm cho nó treo hoặc quá chậm. (hiệu suất phát hành)

Theo Tài liệu Telerik

Đặt một nguồn dữ liệu vào RadComboBox. Sử dụng DataSourceID hoặc thuộc tính DataSource để thực hiện việc này và đặt thuộc tính DataTextField và DataValueField cho các trường tương ứng trong nguồn dữ liệu. (Lưu ý rằng khi sử dụng DataSource, bạn phải đặt thuộc tính trên mỗi postback, thuận tiện nhất trong Page_Init.) Đặt BậtAutomaticLoadOnDemand thành true.

vì vậy tôi phải gọi phương thức sau mỗi lần trong Page_Init !!!

protected void BindInnerInstructors() 
    { 
     ddl_inner_sup.Items.Clear(); 
     ddl_inner_sup.DataSource = Utilities.GetAllInnerInstructors(); 
     ddl_inner_sup.DataValueField = "emp_num"; 
     ddl_inner_sup.DataTextField = "name"; 
     ddl_inner_sup.DataBind(); 
    } 

2- Đối tượng tham chiếu không được đặt để một thể hiện của một đối tượng khi cố gắng thiết lập các lựa chọn của một combo box.

tôi đã khắc phục sự cố này thông qua this.


Tôi có khoảng 4 dropdowlists nhưng mỗi người phải ràng buộc trong theo một sự kiện nhưng tôi phải ràng buộc tất cả trong số họ trong page_init.

Tôi sẽ biết ơn câu trả lời chi tiết cho vấn đề này.

+1

Bạn có thể tìm thấy câu trả lời chi tiết ở đây: http://demos.telerik.com/aspnet-ajax/combobox/examples/loadondemand/wcf/defaultcs.aspx?# qsf-demo-source –

+0

@YuriyRozhovetskiy: cảm ơn rất nhiều nhưng tôi muốn biết khi nào combobox kết hợp, nếu tôi muốn hộp combo kết hợp dữ liệu chỉ trong sự kiện cụ thể để nâng cao hiệu suất? –

Trả lời

8

công ty của tôi có vấn đề tương tự. chúng tôi đã kết thúc bằng cách sử dụng một đối tượng jquery gọi là Select2 và chúng tôi lười tải danh sách. Về cơ bản, chúng tôi chỉ tải 10 lần đầu tiên vào thời gian tải, giúp tải nhanh và nếu người dùng cuộn xuống trong 10 trang đầu tiên, chúng tôi sẽ tải 10 trang tiếp theo và cứ tiếp tục như vậy. Select2 có tính năng tìm kiếm truy cập máy chủ để trả về danh sách tùy chỉnh dựa trên tìm kiếm.

sự cố khi tải 5000 phần tử cùng một lúc là trình duyệt sẽ mất nhiều thời gian để tải chúng, lặp qua chúng và thao tác chúng khi cần. Tôi không nói "bạn phải sử dụng select2" RadComboBox có thể có một cái gì đó như thế này bạn có thể sử dụng.

Chúc may mắn.

+0

Bạn có thể cho tôi một mã mẫu trong .net xin vui lòng? Làm thế nào u điều trị kiểm soát này? –

+1

im không ở một vị trí để cho một ví dụ không may. trong. Net, bạn sẽ tạo một phương thức để tải dữ liệu cần thiết. Bạn sẽ cần phải làm một ít nghiên cứu về phân trang. Mà chỉ đơn giản là ý tưởng lấy một tập dữ liệu lớn và gửi nó qua trong một khối nhỏ quản lý được. Dữ liệu này sẽ cần được tải qua javascript/jquery.Bạn sẽ cần tạo một sự kiện khi người đó cuộn xuống cuối danh sách, sau đó nó sẽ tải trang tiếp theo của dữ liệu. Nếu ai đó tìm kiếm thứ gì đó thì bạn sẽ cần một cuộc gọi .net khác trả về dữ liệu tìm kiếm. –

+0

Tôi tìm thấy điều này với một tìm kiếm google nhỏ. Nó có thể hữu ích. http://www.telerik.com/community/code-library/aspnet-ajax/combobox/paging-in-radcombobox-load-on-demand.aspx –

0

Để đơn giản, bạn chỉ cần thêm 15 hoặc 20 tên đầu tiên và khi người dùng gõ vào combobox, điền combobox với tên trả về từ cơ sở dữ liệu nhưng không phải tất cả, hãy điền nó chỉ với vài cái tên để trình duyệt không treo ...

1

Tôi không khuyên bạn nên hiển thị tập dữ liệu, mà thay vào đó lưu trữ dữ liệu trong đối tượng javascript. Sau đó, bạn có thể thực hiện tự động hoàn tất với danh sách đối tượng đó. Điều này được thực hiện thông qua jquery, sử dụng một bộ chọn, và sau đó áp dụng một chức năng tự động hoàn thành với nó.

Ví dụ:

var systems = [{t:"hi",s:"something"}.{t:"hi",s:"something"},{t:"hi",s:"something"}]; 
$("#s").autocomplete(systems, 
{ 
width: 300, 
formatItem: function(item) 
{ return item.t + item.s; }, 
formatResult: function(item) 
{ return item.t; } 
}); 
+0

Tôi muốn thêm nhận xét rằng phần formatItem được sử dụng trong trình đơn thả xuống của bạn, có chuỗi được định dạng, như nhịp màu, v.v ... hoặc bất kỳ loại thông tin bổ sung CSS nào, nhưng định dạng là thứ sẽ được lưu vào hộp. – Fallenreaper

0

Bạn có thể làm điều tương tự như google nào. Khi bạn viết một cái gì đó trên google, văn bản không giống như bạn đã nhập sẽ biến mất nhưng những văn bản tương tự sẽ vẫn ở đó. Điều này sẽ làm cho việc tìm kiếm của bạn dễ dàng hơn, đây là câu trả lời.

1

Tôi cũng đã gặp một trường hợp tương tự khi số lượng giá trị rất lớn được liên kết với danh sách thả xuống. Phiên bản mới nhất của chrome, firefox và IE có thể liên kết nhưng quá mất khoảng vài phút, nhưng đối với phiên bản cũ hơn, mã treo & không bao giờ hoạt động.

Thay vì sử dụng bất kỳ hộp điều khiển tùy chỉnh hoặc hộp telerik nào, chúng tôi sử dụng cách tiếp cận đơn giản. Chúng tôi trang có kích thước giá trị như cấu hình (nói 50) và số trang (mặc định 1), số trang (Tổng số đếm/kích thước trang) và tiêu chí tìm kiếm (Thành viên đầu vào cho tự động hoàn tất) làm tham số cho giá trị trả về dịch vụ và chỉ tìm nạp các bản ghi bằng kích thước trang theo tiêu chí tìm kiếm đầu vào & số trang.

Lấy một hộp văn bản & liên kết lệnh gọi dịch vụ này với sự kiện thay đổi văn bản của hộp văn bản & kết xuất đầu ra thành menu thả xuống tự động hoàn tất.

Logic cho phân trang & tìm kiếm được thực hiện trong thủ tục lưu trữ như Stored Procedure having Sorting, Paging and Filtering

Đây là dễ dàng, nhanh chóng và khá nhiều duy trì hơn bất kỳ phân trang client-side, ràng buộc, vv

1

Thả xuống trong danh sách không phải là tốt phù hợp cho một danh sách đầy đủ các nhân viên. Ai đó cần suy nghĩ lại về thiết kế.

1

Sử dụng VirtualizingStackPanel làm mụcPanel cho RadComboBox của bạn nếu có số lượng lớn mục được hiển thị. Với VirtualizingStackPanel, bạn có thể có mười nghìn mục trong RadComboBox của mình.

Sử dụng này XAML-Code:

  <!-- WPF ItemsControls like ComboBox, ListBox or Menu use a StackPanel as their internal layout panel. 
       Use a VirtualizingStackPanel for performance. Else the Combobox will freeze! --> 
      <ItemsPanelTemplate x:Key="itemsPanelTemplate"> 
       <VirtualizingStackPanel /> 
      </ItemsPanelTemplate> 

      <!-- This style specifies how RadComboBoxes look like --> 
      <Style TargetType="telerik:RadComboBox"> 
       <Setter Property="ItemsPanel" Value="{StaticResource itemsPanelTemplate}"/> 
      </Style> 
Các vấn đề liên quan