2012-01-15 27 views
14

Tôi đang cố gắng để có được các hàng lưới được chọn Giá trị KeyField ở phía máy khách;ASPXGridView ClientSideEvents Cách lấy Giá trị KeyField của hàng đã chọn

tôi sử dụng để thử sau và có được kết quả khác nhau:

Phương pháp # 1

<ClientSideEvents RowClick="function(s, e) {var key= grid.GetSelectedKeysOnPage()[0];}" /> 
//This gives previous selected rows value everytime 

Phương pháp # 2

<ClientSideEvents RowClick="function(s, e) { grid.GetRowValues(grid.GetFocusedRowIndex(), 'MyKeyFieldName', OnGetRowValues); }" /> 
//This gives previous selected row and also gives an error: "A primary key field specified via the KeyFieldName property is not found in the underlying data source. Make sure.. blabla" But the MyKeyFieldName is true and i dont want to make a callback, i dont want to use this method! 

Phương pháp # 3

<ClientSideEvents RowClick="function(s, e) { grid.GetRowValues(e.visibleIndex, 'MyKeyFieldName', OnGetRowValues); }"> 
//This gives the same result with Method #2 

Câu hỏi đặt ra là: Làm thế nào tôi có thể gath er KeyField Giá trị của (không phải trước đó nhưng) dòng được chọn hiện tại tại sự kiện RowClick của khách hàng mà không cần gọi lại hoặc đăng lại?

Trả lời

17

Phương pháp # 2 và # 3

Cả hai phương pháp đòi hỏi một callback đến máy chủ.

Đảm bảo rằng bạn đã chỉ định thuộc tính ASPxGridView.KeyFieldName được yêu cầu cho thao tác chọn hàng.

Làm cách nào tôi có thể thu thập Giá trị KeyField của hàng đã chọn @ client mà không cần gọi lại hoặc đăng lại?

Xử lý phía máy khách ASPxClientGridView.SelectionChanged sự kiện;

Xác định hàng vừa được chọn qua thuộc tính “e.isSelected”;

Xác định giá trị chính của hàng qua phương thức ASPxClientGridView.GetRowKey của khách hàng.

Vượt qua “e.visibleIndex” bất động sản như một tham số:

<ClientSideEvents SelectionChanged="function(s, e) { 
    if (e.isSelected) { 
     var key = s.GetRowKey(e.visibleIndex); 
     alert('Last Key = ' + key); 
    } 
}" /> 
+0

Cảm ơn bạn, nhưng đây không phải là câu trả lời mà tôi đang mong đợi. Tôi hỏi làm thế nào tôi có thể thu thập giá trị Keyfield của hàng mới được lựa chọn tại sự kiện Clientside RowClick? Và ASPxClientGridView.GetSelectedKeysOnPage [0] đang thay đổi khi lựa chọn thay đổi, nó không giống nhau. – DortGen

+1

Bạn đã thử giải pháp của tôi chưa? Nó tạo ra kết quả gì? – Mikhail

+0

FYI nếu bạn muốn sử dụng giải pháp của Mikhail; vấn đề với việc sử dụng sự kiện SelectionChanged: khi người dùng sắp xếp hoặc lọc; khóa được lưu trữ không được cập nhật (sự kiện SelectionChanged không được kích hoạt) – kite

0
function OnbtnOkClick(s, e) { 
    grid.GetRowValues(grid.GetFocusedRowIndex(), 'FieldName1;FieldName2', OnGetRowValues); 
} 

function OnGetRowValues(values) { 
    var fName1 = values[0]; 
    var fName2 = values[1]; 
    txt1.SetText(fName1); 
} 
1

Làm thế nào để trong 3 bước đơn giản.

Trong trường hợp của tôi, tôi muốn để có được nội dung của một trường ('ID') từ ASPxGridView khi người dùng nhấp vào hàng ...

  1. Tạo ClientSideEvent cho hàng nhấp chuột và đặt "RowClick (s, e); " trong hàm.
  2. Tạo chức năng thực tế sự kiện sẽ gọi như hình dưới đây - và đây là phần phức tạp; không sử dụng GetFocusedRowIndex() để lấy chỉ mục vì nó là chỉ mục FOCUSED. Sử dụng e.visibleIndex

    function RowClick(s, e) { 
        // Do callback to get the row data for 'ID' using current row. 
        MyAspxGridView.GetRowValues(e.visibleIndex, 'ID', OnGetRowId); 
    } 
    
  3. Tạo lại cuộc gọi để nhận trường bạn muốn. Tôi nhận được 'ID'.

    function OnGetRowId(idValue) { 
        alert('ID: ' + idValue.toString()); 
    } 
    
+0

Có một chút chậm trễ ở đây mặc dù. Làm thế nào bạn có thể làm việc xung quanh sự chậm trễ? – IyaTaisho