DatagridviewCell bindata e valore calcolato in base a input utente

giovedì 04 settembre 2014 - 18.03
Tag Elenco Tags  VB.NET  |  .NET 2.0  |  Windows 7  |  Visual Studio 2010  |  SQL Server 2008 R2

plaguebreath Profilo | Junior Member

Salve a tutti, vi espongo il mio problema, ho una datatable bindata in cui ho 8 colonne che rappresentano ingressi e uscite orari. La tabella sorgente deriva da una tabella SQL in cui i dati sono riportati come integer ad esempio 450 vuol dire 7.30, tutto bene perchè in visualizzazione uso cellformatting e visualizzo correttamente l'ora, il problema stà tutto quando invece l'utente deve inserire l'ora in input. Se inserisco ad esempio 780 nella cella il valore viene accettato e giustamente visualizzato nel datagridview ma io vorrei che l'utente inserisse il valore 12.10 e lo stesso valore venisse convertito magari usando cell endedit in 730 nel datatable sorgente ...... avete qualche consiglio da darmi ? Grazie mille.

0v3rCl0ck Profilo | Guru

Ciao, dovresti prendere in considerazioni l'utilizzo dei value converters di wpf, che sono stati creati proprio per la tua esigenza, sia in output che input.

prova a dare un occhio qui: http://wpftutorial.net/ValueConverters.html

e qui: http://tech.pro/tutorial/806/wpf-tutorial-binding-converters

e ancora: http://www.wpf-tutorial.com/data-binding/value-conversion-with-ivalueconverter/


prova a vedere se riesci a saltarci fuori con quei link in linea di massima la soluzione conta di una semplice classe con 2 metodi "Convert" e "ConvertBack", quando l'utente mette l'orario 12.10 il converter restituirà al binding il valore 730, viceversa quando il valore arriva dal modello il binding passerà 730 al converter che gli restituirà 12.10 da visualizzare.


Michael Denny | Visual C# MVP
http://blogs.dotnethell.it/Regulator/
http://dennymichael.wordpress.com
http://mvp.microsoft.com/mvp/Michael%20Denny-5000735
Twitter: @dennymic

0v3rCl0ck Profilo | Guru

giusto un esempio per completezza:

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


Michael Denny | Visual C# MVP
http://blogs.dotnethell.it/Regulator/
http://dennymichael.wordpress.com
http://mvp.microsoft.com/mvp/Michael%20Denny-5000735
Twitter: @dennymic

plaguebreath Profilo | Junior Member

scusami non ho fatto in tempo a mettere nel titolo che uso [VB.NET] non wpf

0v3rCl0ck Profilo | Guru

ma vb.net in windows forms, o vb.net in WPF (windows presentation foundation)?


Michael Denny | Visual C# MVP
http://blogs.dotnethell.it/Regulator/
http://dennymichael.wordpress.com
http://mvp.microsoft.com/mvp/Michael%20Denny-5000735
Twitter: @dennymic

plaguebreath Profilo | Junior Member

windows forms scusami non uso wpf

0v3rCl0ck Profilo | Guru

allora non mi ricordo benissimo, ma credo tu debba intervenire su una coppia di eventi, CellFormatting e CellParsing, che assomigliano un po' al "Convert" e "ConvertBack" dei converter in wpf:

DataGridView.CellFormatting Event: http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.cellformatting.aspx

DataGridView.CellParsing Event: http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.cellparsing.aspx

CellFormatting lo intercetterai per stampare l'orario dato l'integer, mentre CellParsing per impostare l'integer al posto della stringa, prima che venga passato al datatable. Trovi gli esempi direttamente nei link MSDN che ti ho postato sopra.



Michael Denny | Visual C# MVP
http://blogs.dotnethell.it/Regulator/
http://dennymichael.wordpress.com
http://mvp.microsoft.com/mvp/Michael%20Denny-5000735
Twitter: @dennymic

plaguebreath Profilo | Junior Member

Grazie mille e scusa per il ritardo nella risposta, ho provato a fare come hai suggerito tu ed effettivamente ho risolto il mio problema gestendo il cellparsing. grazie !

0v3rCl0ck Profilo | Guru

Bene, lieto di averti aiutato

Ciao!


Michael Denny | Visual C# MVP
http://blogs.dotnethell.it/Regulator/
http://dennymichael.wordpress.com
http://mvp.microsoft.com/mvp/Michael%20Denny-5000735
Twitter: @dennymic
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-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5