2012-01-15 13 views
14

Sto cercando di ottenere il valore KeyField delle righe della griglia sul lato client;ASPXGridView ClientSideEvents Come ottenere il valore KeyField della riga selezionata

ho usato per eseguire le seguenti operazioni e ottenere diversi risultati:

Metodo # 1

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

Metodo # 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! 

Metodo # 3

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

La domanda è: come posso gath er KeyField Valore della riga selezionata (non precedente ma) corrente nell'evento RowClick del client senza callback o postback?

risposta

17

Metodo # 2 e # 3

Entrambi questi metodi richiedono un callback al server.

Assicurarsi di aver specificato la proprietà ASPxGridView.KeyFieldName richiesta per l'operazione di selezione riga.

Come posso raccogliere il valore KeyField della riga selezionata client senza un callback o postback?

Maneggiare il lato client ASPxClientGridView.SelectionChanged evento;

Determina una riga che è stata appena selezionata tramite la proprietà "e.iselected";

Determinare il valore KeyValue della riga tramite il metodo client ASPxClientGridView.GetRowKey.

Passare il “e.visibleIndex” proprietà come un parametro:

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

Grazie, ma questa non è la risposta che mi aspetto. Sto chiedendo come posso raccogliere il valore Keyfield della nuova riga selezionata nell'evento Clientside RowClick? E ASPxClientGridView.GetSelectedKeysOnPage [0] cambia quando la selezione cambia, non è la stessa. – DortGen

+1

Hai provato la mia soluzione? Che risultato produce? – Mikhail

+0

FYI se si desidera utilizzare la soluzione di Mikhail; il problema con l'utilizzo dell'evento SelectionChanged: quando l'utente ordina o filtra; la chiave memorizzata non viene aggiornata (l'evento SelectionChanged non viene attivato) – 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

Come in 3 semplici passi.

Nel mio caso, voglio ottenere contenuti di un campo ('id') dal ASPxGridView quando l'utente fa clic sulla riga ...

  1. Creare il ClientSideEvent per la riga click e mettere "RowClick (s, e); " nella funzione.
  2. Creare la funzione effettiva che l'evento chiamerà come mostrato di seguito - ed ecco la parte difficile; non utilizzare GetFocusedRowIndex() per ottenere l'indice perché è l'indice FOCUSED. Usa 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. Crea la tua chiamata indietro per ottenere il campo che si desidera. Sto ricevendo un 'ID'.

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

C'è comunque un leggero ritardo. Come puoi aggirare il ritardo? – IyaTaisho