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

    [DataGrid/AutoGenerateColumns] Quando in MS dimenticano dei pezzi di codice...

    Sto sviluppando un componente basato su DataGrid per accelerare una serie cose...e mi sono imbattuto in un problema, nel manipolare il DataGrid da cui la mia classe eredita, cui non avevo fatto caso prima...
    Qualcuno mi spiega PERCHE' MAI se AutoGenerateColums è impostato a True, il DataGrid NON aggiunge le BoundColumns generate automaticamente, alla collection Columns????

    VVoVe:

    Mettete un DataGrid su una pagina, assegnategli un DataSource e verificate - senza aggiungere manualmente delle colonne al DataGrid, facendo funzionare soltanto l'AutoGenerateColumns - il numero di elementi della collection Columns.

    Sarà 0!!!! Anche se ci sono tremila colonne nel DataGrid!! VVoVe:

    Aggiungete poi qualche colonna di qualunque tipo, specificata "manualmente" nel costruttore delle proprietà del DataGrid. A prescindere dal valore di AutoGenerateColumns (False o True), il numero restituito da DataGrid.Columns.Count sarà sempre lo stesso, e cioé pari al numero delle SOLE colonne aggiunte manualmente!!!
    VVoVe:

    Ma che grandissima, spaventosa, megagalattica cazzata...
    Questo non è una funzionalità mancante, o qualcosa del genere, è per me un chiaro esempio di quando qualcuno dimentica letteralmente qualche riga di codice

    Adesso grazie a questa cazzata ho un bel grattacapo con l'ottenere nel mio DataGrid-like una collection Columns con TUTTE le colonne effettivamente presenti nel DataGrid, sia che siano state generate automaticamente oppure no...e pare che in rete nessuno l'abbia risolto (o meglio ho trovato una piccola soluzione ma parziale, che risolve il problema soltanto se la DataSource è un DataTable...).
    Qualche idea?

  2. #2
    Risolto questo BUG (e pesante pure..) con una conversione della datasource, se diverso da datatable, in datatable, e con la creazione delle BoundColumns da codice (disabilitando AutoGenerateColumns via codice, quando settato).

    Funziona, ma rimane quel simpatico interrogativo

  3. #3
    Utente di HTML.it L'avatar di Legnetto
    Registrato dal
    May 2002
    Messaggi
    1,419

    Re: [DataGrid/AutoGenerateColumns] Quando in MS dimenticano dei pezzi di codice...

    Originariamente inviato da Nosophoros
    Sto sviluppando un componente basato su DataGrid per accelerare una serie cose...e mi sono imbattuto in un problema, nel manipolare il DataGrid da cui la mia classe eredita, cui non avevo fatto caso prima...
    Qualcuno mi spiega PERCHE' MAI se AutoGenerateColums è impostato a True, il DataGrid NON aggiunge le BoundColumns generate automaticamente, alla collection Columns????

    VVoVe:

    Mettete un DataGrid su una pagina, assegnategli un DataSource e verificate - senza aggiungere manualmente delle colonne al DataGrid, facendo funzionare soltanto l'AutoGenerateColumns - il numero di elementi della collection Columns.

    Sarà 0!!!! Anche se ci sono tremila colonne nel DataGrid!! VVoVe:
    Quando sviluppo una pagina e sono nella fase di creazione della query per comodità uso un datagrid con autogeneratecolumns = true per visualizzare i dati risultanti e, non mi è mai successo niente del genere...
    Visto che stai sviluppando un controllo personalizzato sei sicuro di aver fatto tutto giusto?
    Ciao
    Legnetto

  4. #4

    Re: Re: [DataGrid/AutoGenerateColumns] Quando in MS dimenticano dei pezzi di codice..

    Originariamente inviato da Legnetto
    Quando sviluppo una pagina e sono nella fase di creazione della query per comodità uso un datagrid con autogeneratecolumns = true per visualizzare i dati risultanti e, non mi è mai successo niente del genere...
    Visto che stai sviluppando un controllo personalizzato sei sicuro di aver fatto tutto giusto?
    Ciao
    Legnetto
    Hai fatto la prova che ho descritto sopra?
    Prova prima

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    151
    Scusa, ma se non posti il codice che hai usato non si capisce bene cosa hai fatto e dove sta il problema.
    Io in tutti gli esempi che ho visto, il datagrid veniva sempre riempito con un datatable. Ho sempre usato questa soluzione e in tal caso mi ha sempre funzionato l'AutoGenerateColums anche con classi personalizzate.

  6. #6
    Originariamente inviato da hankmccoy
    Scusa, ma se non posti il codice che hai usato non si capisce bene cosa hai fatto e dove sta il problema.
    Io in tutti gli esempi che ho visto, il datagrid veniva sempre riempito con un datatable. Ho sempre usato questa soluzione e in tal caso mi ha sempre funzionato l'AutoGenerateColums anche con classi personalizzate.
    Credo che tu non abbia letto bene il mio post...
    Non ho detto che l'AutoGenerateColumns non funziona, ma che - assurdo - le colonne create automaticamente NON vengono aggiunte alla collection Columns interna al DataGrid.
    Il riferimento che ho fatto al DataTable è per la soluzione al problema, non è direttamente correlato al problema che sto descrivendo e che si presenta con *qualunque* tipo di DataSource.

    Non c'é nessun codice da postare, e nel caso non si fosse capito il problema NON è in un mio codice, ma nella struttura del DataGrid nel framework stesso.

    Riporto la descrizione del problema, così che in due secondi possiate replicarlo anche voi:

    1. Crea un nuovo webform
    2. Aggiungici un datasource qualsiasi, di qualunque tipo
    3. Dopo il DataBind fai una

    "Response.Write (nomeDataGrid.Columns.Count)"

    E dimmi che valore numerico ti stampa.
    Se la DataSource che tu hai dato in pasto al DataGrid contiene, per esempio, 5 colonne, dovrebbe stampare a video 5, giusto?
    Invece è zero!!
    Questo perché per una deficienza del DataGrid stesso, le colonne generate automaticamente con AutoGenerateColumns non vengono aggiunte alla collection Columns, motivo per cui il .Count restituisce 0!!

    Dopo questa prova, fai queste modifiche:

    1. Aggiungi qualche BoundColumn "manualmente" col Property Builder, per esempio 2, ma senza cambiare il valore di AutoGenerateColumns, che da predefinito ovviamente è rimasto su True.

    Prova adesso a fare "Response.Write (nomeDataGrid.Columns.Count)" dopo il DataBind, e dimmi cosa ti stampa.
    Stamperà soltanto il numero delle colonne che TU hai manualmente aggiunto al DataGrid, come se le colonne generate automaticamente non ci fossero!!
    Dovrebbe stampare 2 (le col. da te aggiunte) + 5 (le col. gener. autom. nell'esempio) = 7 e invece stampa 2!!

    Prova poi a mettere AutoGenerateColumns su False, e a rifare "Response.Write (nomeDataGrid.Columns.Count)"
    Il risultato non cambia!

    Capito ora?

  7. #7
    Utente di HTML.it L'avatar di Legnetto
    Registrato dal
    May 2002
    Messaggi
    1,419

    Re: Re: Re: [DataGrid/AutoGenerateColumns] Quando in MS dimenticano dei pezzi di codice..

    Prova ad aggiungere le colonne nel page_init e fai ancora la prova...
    [EDIT]
    la prova che hai descritto in dettaglio non l'ho mai fatta.

  8. #8

    Re: Re: Re: Re: [DataGrid/AutoGenerateColumns] Quando in MS dimenticano dei pezzi di

    Originariamente inviato da Legnetto
    Prova ad aggiungere le colonne nel page_init e fai ancora la prova...
    [EDIT]
    la prova che hai descritto in dettaglio non l'ho mai fatta.
    Page_Init? Che c'entra? è un controllo esterno basato su DataGrid, non posso agire sul Page_Init (almeno credo) e non vedo come possa tornare utile.
    Ho risolto, tutto sommato, agendo sul LoadViewState del mio controllo, creando via codice i BoundColumns a disabilitando via codice l'AutoGenerateColumns così da avere lo stesso risultato "visivo" (cioé le colonne generate automaticamente se l'utente imposta AutoGenerateColumns su True), ma con la collection Columns popolata come si deve, così posso agirvi sopra a piacere

    Grazie per l'interessamento da parte di entrambi, anche se mi avrebbe fatto piacere che provaste anche voi questa cosa, non perché abbia bisogno di conferma (ne sono certo, ho già inviato segnalazione a Ms), ma giusto per farvi rendere conto di cosa parlavo

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.