12 messaggi dal 01 febbraio 2006
Salve, ho un problema con le GridView e i controlli datasource.

Quello che devo ottenere è una grid con la colonna Nome e un numero variabile di colonne checkbox, una specie di registro assenze tanto x fare un esempio.

Mi sono appoggiato ad un ObjectDataSource che a sua volta prende i dati da una mia classe custom.

La generazione dinamica delle colonne sono riuscita ad ottenerla usando una datatable.

Il problema è che la gridview mi renderizza queste colonne come checkbox disabled e devo mettere la row in modalità edit per modificarne lo stato.

Questo è molto laborioso e vorrei che i checkbox fossero editabili anche se la riga non è in edit e soprattutto vorrei che tutti i checkbox fossero abilitati.

Ho pensato che potrei fare delle checkboxcolumn o templatecolumn, ma dato che non ho modo di sapere quante colonne avrà la mia gridview, ho dovuto lasciare attiva l'opzione auto-generate columns..

Come potrei fare?? Qualcuno ha la magica idea??


Per esempio, il sqldatasource come fa ad aggiungere le column in base alla query??

Ringrazio in anticipo chi avrà la pazienza di leggere, pensare e, se possibile, rispondere alla mia domanda.

Se non è chiaro qualcosa (non mi sono spiegato molto bene) chiedete..
puoi aggiugere colonne programmaticamente GridView.Columns.Add(....)
e deciderne il numero in base alla tua classe custom.

ciao marco

Chi parla senza modestia troverà difficile rendere buone le proprie parole.
Confucio

http://nostromo.spaces.live.com/default.aspx
12 messaggi dal 01 febbraio 2006
nostromo ha scritto:
puoi aggiugere colonne programmaticamente GridView.Columns.Add(....)
e deciderne il numero in base alla tua classe custom.

ciao marco



Come pensavo non mi sono spiegato.. scusate..

Sono riuscito ad aggiungere le colonne restituendo una datatable custom dal metodo selezionato come selectmethod dal mio oggetto collegato all'objectdatasource, ma così la gridview associata mi autogenera le colonne come vuole lei.. a me serve aggiungere colonne diverse, con dei checkbox sempre attivi..

E' possibile farlo dal datasource??? cioè dal datasource non c'è modo di vedere la gridview.. anche se non è molto corretto logicamente..

L'unica cosa che mi viene in mente è agganciare l'evento Selected.. ora provo..
avevo capito per questo ti consigliavo di non utilizzare l'autogenerazione.

secondo me dovresti ad esempio nel pageload o nell'evento Selected (ObjectDataSource) creare le colonne del tuo GridView runtime, così da poter aggiungere quella che ti è più congeniale.


p.s naturalmente di tevi creare una TemplateField da aggiungere.


ciao marco

Chi parla senza modestia troverà difficile rendere buone le proprie parole.
Confucio

http://nostromo.spaces.live.com/default.aspx
12 messaggi dal 01 febbraio 2006
ti ringrazio tantissimo per l'aiuto..

Per adesso ce l'ho fatta.. se avrò altri problemi riposterò..

Mi hai veramente salvato..

Ok.. altri problemi..

1-Se modifico le colonne del gridview nell'evento Selected mi richiama il databind.. entrando in loop.... come posso fare??

Altra idea geniale...??

2-Come faccio ad assegnare il datafield?? Scrivendo nell'ascx direttamente ho messo Eval("data1") ma dinamicamente come posso fare?

Non sentirti obbligato a rispondere naturalmente..
Modificato da shadow7853 il 27 dicembre 2006 10.48 -
1- il primo problema lo devo verificare, onestamente no mi è mai capitato e probabilmente non è l'evento giusto per farlo

2- per rispondere avrei bisogno di altre informazioni, come è strutturata la tua pagina? dove si trova l'UserControl?

ciao marco

Chi parla senza modestia troverà difficile rendere buone le proprie parole.
Confucio

http://nostromo.spaces.live.com/default.aspx
12 messaggi dal 01 febbraio 2006
nostromo ha scritto:
1- il primo problema lo devo verificare, onestamente no mi è mai capitato e probabilmente non è l'evento giusto per farlo

2- per rispondere avrei bisogno di altre informazioni, come è strutturata la tua pagina? dove si trova l'UserControl?

ciao marco



Allora.. ho creato un ascx (è l'unico modo per fare un template vero??) nella stessa cartella della pagina che lo utilizza, poi ho fatto:

TemplateField tf = new TemplateField();
tf.ItemTemplate = Page.LoadTemplate("Template.ascx");
tf.HeaderText... ecc..

this.GridView.Columns.Add(tf);


nell'ascx ho messo un checkbox e devo associare la sua proprietà checked ad una colonna della datatable che mi ritorna il SelectedMethod dell'ObjectDataSource, essendo però le colonne di questa datatable dinamiche non so a priori il loro nome..

come faccio a passare questo nome all'ascx e a metterlo nel tag <%# Eval("NOME CHE DEVO PASSARE") %> nella proprietà checked del checkbox??
12 messaggi dal 01 febbraio 2006
Ho pensato che posso passare i nomi con un oggetto di sessione..

Ma poi non riesco a usare l'Eval..

Cioè, il tag <%# Eval("...") %>, richiama DataBinder.Eval(...)?? giusto??

Però DataBinder.Eval mi chiede 2 parametri:
1 - la stringa expression, dove ci metto il nome giusto (il datafield)
2 - l'oggetto container.. e qui che ci metto?? ho provato a metterci l'objectdatasource, la gridview, e.ObjectInstance nell'ObjectCreated, e.RturnValue nel Selected Event... non funziona..

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.