2012-03-01 36 views
7

Tôi đang cố gắng sử dụng tính năng của GWT DataGrid để hiển thị gif động khi dữ liệu đang tải từ cuộc gọi RPC đến máy chủ.GWT DataGrid setLoadingIndicator không có hiệu lực

Tôi không tìm thấy bất kỳ tài nguyên nào bất kỳ. Sự hỗ trợ cho điều này thực sự nghèo nàn.

tôi inizialize DataGrid của tôi sử dụng:

myDataGrid.setLoadingIndicator(new Image(/*my ImageResource object*/); 

và trong dòng chảy của chương trình tôi sử dụng:

myDataGrid.fireEvent(new LoadingStateChangeEvent(LoadingState.LOADING)); 

khi tôi muốn đặt DataGrid trong 'LOADING' nhà nước, tức là chỉ trước khi thực hiện cuộc gọi RPC và sau đó:

myDataGrid.fireEvent(new LoadingStateChangeEvent(LoadingState.LOADED)); 

ngay sau khi lưới được điền dữ liệu.

Điều này không hiệu quả. Tôi không thấy bất kỳ thay đổi nào trong DataGrid, tôi không thể nhìn thấy gif động, nó chỉ không thay đổi trong suốt quá trình. Có điều gì tôi đang làm sai?

Vui lòng trợ giúp.

+0

Vâng, ý tôi là RPC (Gọi thủ tục từ xa). Có cách tiêu chuẩn GWT sử dụng để giao tiếp với máy chủ. Đừng tập trung vào điều đó. Câu hỏi đặt ra là trạng thái tải của DataGrid. Làm thế nào tôi có thể thiết lập trạng thái 'Đang tải' của DataGrid sao cho nó hiển thị chỉ báo tải mà tôi đã thiết lập trước đó bằng cách sử dụng hàm setLoadingIndicator(), và sau đó, làm thế nào tôi có thể thiết lập trạng thái bình thường, 'Nạp' của DataGrid đó là hiển thị các hàng được nạp? Đây là câu hỏi thực sự. Tôi đã sử dụng dataGrid.fireEvent (mới LoadingStateChangeEvent (LOADING/LOADED)); nhưng dường như nó không có hiệu lực. Tôi đang ở đâu? – Magallo

Trả lời

9

Nếu bạn gọi updateRowCount(0, false), hình ảnh tải sẽ được hiển thị.

+1

Cảm ơn bạn đã trả lời. Dù sao tôi không thể tìm thấy phương thức updateRowCount() cho DataGrid. Phương pháp này được gọi là gì? – Magallo

+0

Trong thực tế, tôi thấy updateRow() được kế thừa từ AbstractDataProvider và được bảo vệ nên tôi không thể gọi nó. Tại sao nó được bảo vệ? Có cách nào khác không? – Magallo

+0

Nó được bảo vệ bởi vì nhà cung cấp dữ liệu của bạn nên gọi nó. Vì vậy, khi bạn hỏi nhà cung cấp dữ liệu của bạn để biết thêm thông tin, DP của bạn có thể NGAY LẬP TỨC gọi 'updateRowCount (0, false)', và sau đó, khi cuộc gọi máy chủ của bạn trả về, hãy gọi 'updateRowCount (sizeOfResult, true)' –

1

Tôi có một vài DataGrids trong ứng dụng của mình và tôi sử dụng đoạn mã dưới đây cho tất cả chúng. Trước tiên, bạn phải xóa dữ liệu, để không có bản ghi nào trong lưới, và sau đó đặt số hàng thành một số lớn hơn 0. Xin lưu ý rằng chỉ báo tải chỉ hoạt ảnh khi dữ liệu được nhận qua RPC. Ngay khi lưới được hiển thị (cũng có thể mất một lúc) hoạt ảnh bị đóng băng.

// Only required if you are using a pager 
    int pageSize = pager.getPageSize(); 

    // This will trigger the onRangeChanged-event and call 
    // the data provider 
    dataGrid.setVisibleRangeAndClearData(new Range(0, 1), true); 
    // Together with the row above, this will show the loading-indicator 
    // in the data grid 
    dataGrid.setRowCount(1); 

    // Usually, the data is loaded when the data grid is initialized. 
    // In my application, the user has to enter some input first and 
    // then (re-)load the data via a button. 
    // If you want your data grid to be filled when it is intialized, 
    // simply remove the if-block 
    if (dataProvider.getDataDisplays().size() == 0) { 
     dataProvider.addDataDisplay(dataGrid); 
    } 

    // This will re-set the paging (only required if you are using a pager) 
    dataGrid.setPageSize(pageSize); 
0

Tôi không chắc chắn phiên bản nào được thêm vào, nhưng trong 2.8.0-beta1 tôi sử dụng dataGrid.setRowCount(0, false) để đạt được điều gì đó tương tự.

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