Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,856

    lanciare gridview.selectedindexchanged

    Ho una pagina con una multiview: in una vista ho un gridview e nell'altra vista invece mostro più in dettaglio i dati del record che viene selezionato nel gridview della prima view.
    Praticamente quando seleziono un record nella prima vista, switcho sulla seconda vista e mostro dei dati.
    Mi servirebbe ora poter accedere direttamente alla seconda vista quando arrivo sulla pagina con un dato in querystring (il dato poi altro non è che lo stesso valore che uso per il datakey del gridview).

    L'idea mia era di impostare da codice il selectedIndex del gridview col valore ricevuto in querystring in modo che si scatenasse automaticamente anche tutta la procedura come se avessi cliccato sulla riga del gridview, ma se i dati nella gridview sono paginati come lo becco l'index del dato che sto cercando?
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  2. #2
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,886
    passare anche l'indice di pagina (se è maggiore di 0) non va bene ?
    https://goo.gl/JmCMHZ

  3. #3
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,856
    Arrivo nella pagina da un altro url con in querystring solo il codice dell'articolo presentato nel gridview (il datakey della gridview), non lo so l'indice di pagina... dovrei calcolarlo sulla base del pagesize del gridview e della posizione dell'articolo nel datatable bindato alla gridview (?)
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  4. #4
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,886
    Quote Originariamente inviata da supermac Visualizza il messaggio
    non lo so l'indice di pagina... dovrei calcolarlo sulla base del pagesize del gridview e della posizione dell'articolo nel datatable bindato alla gridview (?)
    si, devi conoscere il DataItemIndex, cioe' l'indice della riga interessata nel datasource del gridview.

    l'indice della pagina poi dovrebbe essere:
    IndicePagina = (parteintera(DataItemIndex / PageSize)) + 1

    ad esempio, con pagesize 10:

    22mo record: indicePagina = parteintera(2,2) + 1 = 2+1 = 3a pagina
    57mo record: indicePagina = parteintera(5,7) + 1 = 5+1 = 6a pagina
    Ultima modifica di djciko; 09-09-2017 a 02:37

  5. #5
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,856
    Soluzione (o almeno mi pare che funzioni)
    codice:
     If "" & Request("an_conto") <> "" Then
          Dim conto As Integer = Int(Request("an_conto"))
                    
          '1) conto i record del datatable usato come datasource del gridview
          Dim rc As Integer = dt.Rows.Count
          
          '2) rilevo la posizione del mio articolo nel datatable
          Dim pa As Integer = 0
          For i = 0 To rc - 1
               pa = i
               If dt.Rows(i).Item("an_conto") = conto Then Exit For
          Next
    
          '3) individuo in che pagina del gridview paginato si troverebbe il mio articolo 
          Dim ps As Integer = GridView1.PageSize
          Dim pi As Integer = Fix(pa / ps) 'indice di pagina
          
           '4) setto il pageindex
           GridView1.SetPageIndex(pi)
    
           '5) rilevo la posizione del mio IDarticolo nella pagina specifica
           Dim rindex As Integer =  pa - (pi * ps)
           
           '6) seleziono la riga e scateno l'evento selectedindexchanged 
           GridView1.SelectRow(rindex)
     End If
    Ultima modifica di supermac; 18-09-2017 a 08:54
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  6. #6
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,856
    Adesso mi è venuto un dubbio:
    ma se il gridview è impostato a sortable e i dati sono ordinati in maniera diversa dall'ordinamento del datatable cosa succede?
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  7. #7
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,886
    Succede che al punto 5 potresti beccare un altro record.

    Comunque, a quanto ho capito tu vuoi simulare il click sulla riga (fatto su un CommandField, immagino) atterrando sulla pagina con a disposizione soltanto l'ID del record, giusto ?

    Ma pensaci bene, vale la pena passare per la griglia "master" quando hai a disposizione gia' i dati dell'articolo (o almeno hai l'ID) ? Non ti sembra una forzatura, scatenare il selectedIndexChanged ?


    ---
    Detto cio', il pezzo di codice che cerca una riga in un GridView dato un valore (se la colonna ID non è visualizzata aggiungi un HiddenField con il valore dell'ID e poi cercalo con FindControl) è questo:

    codice:
    foreach (GridViewRow R in GridView.Rows)
    {
        //HiddenField H = (HiddenField)R.FindControl("id_nascosto");
        //if (H.Value == "id cercato")
        //{
        //    GridView.SelectedIndex = R.RowIndex;
        //    BindGrid(); // bind completo
        //}
    
    
        if (R.Cells[X].Text == "id cercato") // X è l'indice della colonna
        {
            GridView.SelectedIndex = R.RowIndex;
            BindGrid();
        }
    }


    ma con un gridview paginato, potrebbe essere in un'altra pagina ed ora ci penso
    Ultima modifica di djciko; 18-09-2017 a 18:01

  8. #8
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,856
    mi sa che mi sto facendo un problema che non esiste: se arrivo nella pagina da fuori non è un postback quindi i dati nel gridview (sortable o non sortable che sia) hanno l'ordinamento di default del datatable... insomma l'id di riga sarà sempre quello

    Il mioc odice già funziona con i dati paginati... tutto ciò solo per riciclare il codice già scritto sul selectedIndexchanged del gridview, pura pigrizia :-)
    Ultima modifica di supermac; 22-09-2017 a 11:52
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  9. #9
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,886
    si, ma permettimi di dire che simulare il click per il selectedIndexChanged è una cosa abbastanza forzata...

    passare per questo evento, quando hai gia' l'ID del dettaglio a cosa serve ? ad illuminare la riga ?

  10. #10
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,856
    in effect... volevo lavorare meno e alla fine ho lavorato di più
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.