Newsgroup: it.comp.lang.visual-basic
Titolo: DateTime e griglia, separatore ora

Ciao a tutti,
su XP che di default ha il sep. ora "." io posso scrivere la data/ora in
una griglia sia come 11.55 che 11:55 viene riconsciuto in entrambi modi dal
parse che fa internamente.
Se ho il separatore stile Win7, ovvero i ":" riconosce solo i 11:55, che
evento dovrei intercettare per fare almeno una sostituzione del "." col
separatore predefinito della macchina.
Tempo fa avevo delegato l'evento KeyPress al momento dell'enter nelle celle
di quel tipo, deregistrandolo al cambio di cella ma
1) non mi piace troppo
2) registrare/deregistrare un evento decine di volte nella vita di una
maschera non � male?

 maschera non è male?
Scusate ho tralasciato che parlavo di 
VB.NET
 e DataGridView, ho  messo del
codice del genere ma non funziona bene:
Private Sub grdRighe_CellValidating(ByVal sender As System.Object, ByVal e
As System.Windows.Forms.DataGridViewCellValidatingEventArgs) Handles
grdRighe.CellValidating
  Dim cell As DataGridViewCell =
grdRighe.Rows(e.RowIndex).Cells(e.ColumnIndex)
  cell.Value = cell.Value.ToString().Replace("."c,
Globalization.DateTimeFormatInfo.CurrentInfo.TimeSeparator(0))
End Sub

 End Sub
Dovresti usare l'evento DataGrid_CellParsing e metterci il codice di 
sostituzione, poi settare e.ParsingApplied = True prima di uscirne:
    e.Value = DateTime.Parse(e.Value.ToString.Replace("."c, 
Globalization.DateTimeFormatInfo.CurrentInfo.TimeSeparator(0)))
    e.ParsingApplied = True
Bye
Raf 

     e.ParsingApplied = True
Bingo, grazie infinite, pare andare, lo testo un attimo (ripreso in parte
da MSDN).
Una cosa non mi è chiara, e.ParsingApplied è False predefinito, per le
altre colonne che non devono avere trasformazione rimarrà sempre false,
come mai non mi da alcun problema?
E' quindi un flag per non far "propagare" un ulteriore parsing interno?
http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridviewcellparsingeventargs.parsingapplied.aspx
    Private Sub grdRighe_CellParsing(ByVal sender As Object, ByVal e As
System.Windows.Forms.DataGridViewCellParsingEventArgs) Handles
grdRighe.CellParsing
        If Me.grdRighe.Columns(e.ColumnIndex).Name = "DATETIME_FIELD" Then
            If e IsNot Nothing Then
                If e.Value IsNot Nothing Then
                    Try
                        ' Map what the user typed into UTC.
                        If e.Value.ToString.IndexOf(".") > 0 Then
                            e.Value = e.Value.ToString.Replace("."c,
Globalization.DateTimeFormatInfo.CurrentInfo.TimeSeparator(0))
                        End If
                        e.Value = DateTime.Parse(e.Value.ToString())
                        ' Set the ParsingApplied property to 
                        ' Show the event is handled.
                        e.ParsingApplied = True
                    Catch ex As FormatException
                        ' Set to false in case another CellParsing handler
                        ' wants to try to parse this
DataGridViewCellParsingEventArgs instance.
                        e.ParsingApplied = False
                    End Try
                End If
            End If
        End If
    End Sub

 E' quindi un flag per non far "propagare" un ulteriore parsing interno?
Sì, è un flag che indica che la cella è già stata parsata in modo "custom", 
pertanto non verrà invocato il parser default.
Raf 

 pertanto non verrà invocato il parser default.
Grazie