Datagrid e checkbox

lunedì 26 maggio 2008 - 14.29

stee85 Profilo | Senior Member

ciao a tutti,
come faccio a mettere una condizione if in un checkbox del datagrid?


<asp:CheckBox ID="mod_def" Columns="5"
Checked='<%# DataBinder.Eval(Container.DataItem,"UomDef")=="T" ? true : false %>
Runat="server" />'

io ho fatto così ma non funziona... non viene mai flaggato il checkbox

grazie
Ste

alx_81 Profilo | Guru

>ciao a tutti,
Ciao!

>come faccio a mettere una condizione if in un checkbox del datagrid?
Gestisci l'evento ItemDataBound e, dopo aver controllato che si tratti di una riga di tipo Data, fai una semplice if per valorizzare il checkbox.
Per localizzare il controllo puoi utilizzare la FindControl() che ti ritorna l'istanza del controllo stesso.

Eccoti un paio di link di reference:

DataGrid.ItemDataBound Event
http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.datagrid.itemdatabound.aspx

Control.FindControl Method
http://msdn.microsoft.com/en-us/library/486wc64h.aspx
>
>grazie
di nulla!
Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

stee85 Profilo | Senior Member

grazie per risp..
Penso di aver sbagliato qualche cosa

nel datagrid ho aggiunto
OnItemDataBound="Item_Bound"

nel codice
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Mi va in errore qui quando carico la pagina
string key = DataGrid1.DataKeys[e.Item.ItemIndex].ToString();

l'errore è questo

Index non compreso nell'intervallo. Richiesto valore non negativo e minore della dimensione dell'insieme.
Nome parametro: index



Io l'avevo pensata così..
trovo l'id del record (datakeyfield) e poi controllo nel mio dataview che valore dovrebbe avere e poi lo assegno al checkbox
Dov'è che sbaglio?

grazie
Ste

alx_81 Profilo | Guru

>nel datagrid ho aggiunto
>OnItemDataBound="Item_Bound"
ok
>
>Dov'è che sbaglio?
La gestione dell'evento andrebbe cambiata:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

è importante il controllo del tipo dell'item all'inizio.
Altrimenti coinvolgi anche l'header e il footer.
>
>grazie
di nulla!
Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

stee85 Profilo | Senior Member

Ehm un ultima domanda e poi spero di esserci .. :)

il mio campo del datagrid è strutturato in questo modo

<asp:TemplateColumn HeaderText ="Default"> <FooterTemplate> <asp:CheckBox ID="add_def" Runat="Server" /> </FooterTemplate> <ItemTemplate> <%# DataBinder.Eval(Container.DataItem,"UomDef") %> </ItemTemplate> <EditItemTemplate> <asp:CheckBox ID="mod_def" Columns="5" Runat="server" /> </EditItemTemplate> </asp:TemplateColumn>

Quindi il valore lo prendo da ItemTemplate ma poi lo devo usare nell'editTemplate

come faccio?


Ste

alx_81 Profilo | Guru

>Ehm un ultima domanda e poi spero di esserci .. :)
>Quindi il valore lo prendo da ItemTemplate ma poi lo devo usare
>nell'editTemplate
quando fai il bound, la riga può essere in edit o meno. Se è in edit devi devi andare a prendere il checkbox, viceversa no.
Se il valore che devi testare non è nella griglia, devi effettivamente accedere al dataItem:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5