Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [c#] GridView e colonne nascoste

    Ciao a tutti.
    GridView mi sta facendo impazzire e lo sto quasi odiando.
    Vi spiego il mio problema.

    Creo un gridview e da codice gli associo un datatable; dopododichè decido che la colonna contentente l'ID non voglio visualizzarla così imposto la proprietà Visible del mio BoundField a False.

    All'interno del codice voglio però recuperare l'ID (che è nella colonna nascosta) della riga selezionata.

    Cosa succede? La riga esiste, ma il Text della cella che mi interessa risulta impostato a "" cose se, nascondendo la colonna in realtà non la stessi valorizzando...

    Se invece metto la colonna visibile allora nella proprietà text della cella della riga selezionata troverò correttamente il mio ID...

    Come posso risolvere la questione?!?!?!

    Grazie mille!
    Ciao ciao
    Lidia

  2. #2
    prova a lasciare la colonna visibile, poi prendi l'id da codice e dopo aver preso l'id, sempre da codice, rendi la colonna invisibile......
    e' un po' una zozzata pero'!


  3. #3
    Ho trovato la soluzione...

    Bisogna rendere la colonna che si vuole creare una colonna TemplateField che contiene al suo interno un HiddenField:

    codice:
    <asp:TemplateField ShowHeader="False">
            <ItemStyle Width="0px" />
                    <ItemTemplate>
                            <asp:HiddenField Visible="false"  ID="hfID" runat="server" Value=<%# Bind("ID") %>  />
           </ItemTemplate>
     </asp:TemplateField>
    Impostare la larghezza a 0 non serve praticamente a niente perchè la colonna, anche se vuota, viene comunque creata ed è visibile; quindi nel codice, dopo aver associato il DataSource ed effettuato il DataBind(), cioè quando i dati sono stati già associati al GridView, bisogna intercettare l'evento RowCreated della griglia e nascondere quindi la colonna che ci interessa tramite questo codice:

    codice:
            e.Row.Cells[0].Visible = false;
    Attenzione però che se la griglia ha una paginazione si dovrà nascondere la colonna solo per quelle righe che non sono di tipo TableCell (TableCell è infatti il tipo della riga su cui viene effettuata la paginazione).

    Quindi ho aggiunto nell'evento RowCreated questo codice:

    codice:
            if (e.Row.Cells[0].GetType().Name!="TableCell")
            {
                e.Row.Cells[0].Visible = false;
            }
    Spero che sia utile a qualcuno...
    Ciao
    Ciao ciao
    Lidia

  4. #4
    Dimenticavo... per recuperare il valore dell'ID nella colonna con l'hiddenfield il codice è questo:

    codice:
    string  IDSelezionato= (((HiddenField)(GridView.SelectedRow.Cells[0].FindControl("HiddenFieldID"))).Value);
    Ciao ciao
    Lidia

  5. #5
    Utente di HTML.it L'avatar di fede_00
    Registrato dal
    May 2004
    Messaggi
    279
    tieni la colonna impostata a visibile false
    poi prima della chiamata al metodo DataBind della gridview imposti il DataKeyNames, sempre della gridview, alla tua colonna ID
    es:
    grid.DataKeyNames = new string[] { "ID"}; //ID deve essere un nome di colonna presente nel db

    così ogni riga avrò una sua chiave e tu potrai recuperarla all'interno dell'evento SelectedIndexChanging

    codice:
    (all'interno dell'evento SelectedIndexChanging)
    grid.SelectedIndex = e.NewSelectedIndex;
    int id = Convert.ToInt32(grid.SelectedDataKey["ID"]);

  6. #6
    Utente di HTML.it L'avatar di Franz78
    Registrato dal
    Sep 2004
    Messaggi
    730
    Ancora meglio...
    la colonna nn la mettere per niente e metti solo il DataKeyNames come spiega fede_00

    Ciao!

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 © 2025 vBulletin Solutions, Inc. All rights reserved.