prima di tutto tengo a precisare che non mi paga Janky per fare questo post :D. Oggi mi arriva una chiamata dal funzionale perchè il cliente vuole una modifica su una pagina web. La pagina in questione mostra una lista di alert presenti a sistema, la modifica consiste nella possibilità di rendere attivi o meno gli alert tramite una combobox presente nella lista. Mi accingo quindi a fare le modifiche
- Non devo aggiungere nulla al database perchè ho una colonna status intera che gestisco con un enum di tipo Flag
- 10 secondi per aggiungere una proprietà alla classe (con gli snippet si fa subito) che internamente utilizza la proprietà status
A questo punto vado nella pagina ed inserisco una nuova colonna nella datagrid
<asp:TemplateField>
<ItemTemplate>
<asp:CheckBox ID="cbEnabled" runat="server" Checked='<%# IsChecked(Eval("Enabled")) %>'
autopostback="true" OnCheckedChanged="EnabledItemTemplateCheckChange" />
< span>ItemTemplate>
< span>asp:TemplateField>
A questo punto ho bisogno di due funzioni nel code behind, una che gestisce il checked durante il binding chiamata IsChecked() e l'altra che gestisce l'evento di CheckedChanged
Public Function IsChecked(ByVal Enabled As Object) As String
If (DirectCast(Enabled, Boolean)) Then
Return "true"
Else
Return "false"
End If
End Function
Public Sub EnabledItemTemplateCheckChange(ByVal sender As Object, ByVal e As EventArgs)
Dim chb As CheckBox = DirectCast(sender, CheckBox)
Dim dgrow As GridViewRow = DirectCast(chb.NamingContainer, GridViewRow)
Dim uow As IUnitOfWork = DataAccessProviderFactory.GetConversationUnitOfWork()
Dim al As Alert = uow.GetReferenceByKey(Of Alert)(gwAlerts.DataKeys(dgrow.RowIndex).Value)
al.Enabled = chb.Checked
End Sub
Particolarmente piacevole è la seconda, grazie ad un modulo http che gestisce il pattern di session per request di nhibernate l'unica cosa che debbo fare è recuperare la riga che contiene la checkbox che è stata cambiata, poi recupero dal database l'oggetto alert grazie alla proprietà GetReferenceByKey ed infine cambio il valore della proprietà enabled. Non devo gestire null'altro perchè al termine della richiesta http il modulo effettua il commit della transazione ed è tutto ok.
Tempo totale 10 minuti in tutto, a questo punto ripenso a quanto lavoro ho risparmiato rispetto ad utilizzare dataset tipizzati o altri pattern. :D
Alk.