Re: EditMask в DataGrid
От: cyberok  
Дата: 22.08.06 10:02
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Можно ли сделать в одном из столбцов DataGrid маску ввода для ввода даты(DateTime)


А>Пример: дд.мм.гг


В описании стиля грида:

Dim col As New DataGridTextBoxColumn
With col
.MappingName = "TransitDateTime"
.HeaderText = "Дата"
.Width = 130
.TextBox.MaxLength = 16
.Format = "dd.MM.yyyy HH:mm"
.NullText = ""
End With
AddHandler col.TextBox.KeyDown, AddressOf ut_ValidDateTimeInput


[AddHandler col.TextBox.KeyDown, AddressOf ut_ValidDateTimeInput] — ссылка на обработчик ввода

Процедура обработки ввода:

Public Sub ut_ValidDateTimeInput(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs)
Dim mVal As String
Dim PosInVAL As Integer
Dim PosInTXT As Integer


mVal = sender.Text
PosInTXT = sender.SelectionStart


mVal = mVal.Replace(".", "")
mVal = mVal.Replace(" ", "")
mVal = mVal.Replace(":", "")
mVal = mVal.Replace("_", "")

If PosInTXT = 0 Then PosInVAL = 0
If PosInTXT = 1 Then PosInVAL = 1
If PosInTXT = 2 Then PosInVAL = 2
If PosInTXT = 3 Then PosInVAL = 2
If PosInTXT = 4 Then PosInVAL = 3
If PosInTXT = 5 Then PosInVAL = 4
If PosInTXT = 6 Then PosInVAL = 4
If PosInTXT = 7 Then PosInVAL = 5
If PosInTXT = 8 Then PosInVAL = 6
If PosInTXT = 9 Then PosInVAL = 7
If PosInTXT = 10 Then PosInVAL = 8
If PosInTXT = 11 Then PosInVAL = 8
If PosInTXT = 12 Then PosInVAL = 9
If PosInTXT = 13 Then PosInVAL = 10
If PosInTXT = 14 Then PosInVAL = 10
If PosInTXT = 15 Then PosInVAL = 11
If PosInTXT = 16 Then PosInVAL = 12

If Not IsNumeric(mVal) And Len(mVal) > 0 Then
mVal = mVal.Remove(mVal.Length — 1, 1)
PosInVAL = PosInVAL — 1
End If

If e.KeyCode = Keys.Back Then
If mVal.Length > 0 And PosInVAL > 0 And mVal.Length = PosInVAL Then
If PosInTXT < 15 Then
mVal = mVal.Remove(PosInVAL — 1, 1)
PosInVAL = PosInVAL — 1
End If
End If

Else
'============= подстановка месяца
If mVal.Length = 3 Then
If mVal.Substring(2, 1) > 1 Then
mVal = mVal.Substring(0, 2) & "0" & mVal.Substring(2, 1)
PosInVAL = PosInVAL + 1
End If
End If
'============= подстановка года
If mVal.Length = 5 Then
If mVal.Substring(4, 1) > 2 Then
mVal = mVal.Substring(0, 4) & "200" & mVal.Substring(4, 1)
PosInVAL = PosInVAL + 3
End If
End If
If mVal.Length > PosInVAL And PosInVAL > 0 Then
mVal = mVal.Insert(PosInVAL — 1, e.KeyData)
'PosInVAL = PosInVAL + 1

End If
End If


If PosInVAL = 0 Then PosInTXT = 0
If PosInVAL = 1 Then PosInTXT = 1
If PosInVAL = 2 Then PosInTXT = 3
If PosInVAL = 3 Then PosInTXT = 4
If PosInVAL = 4 Then PosInTXT = 6
If PosInVAL = 5 Then PosInTXT = 7
If PosInVAL = 6 Then PosInTXT = 8
If PosInVAL = 7 Then PosInTXT = 9
If PosInVAL = 8 Then PosInTXT = 11
If PosInVAL = 9 Then PosInTXT = 12
If PosInVAL = 10 Then PosInTXT = 14
If PosInVAL = 11 Then PosInTXT = 15



'================= ЗАПИСЬ В ТЕКСТВОХ
If mVal.Length = 0 And e.KeyCode = Keys.Back Then sender.Text = mVal.Insert(0, "")
If mVal.Length = 1 Then sender.Text = mVal.Insert(1, "_.__.____ __:__") : sender.SelectionStart = 1 : sender.SelectionLength = 1

If mVal.Length = 2 Then sender.Text = mVal.Insert(2, ".__.____ __:__") : sender.SelectionStart = 3 : sender.SelectionLength = 2
If mVal.Length = 3 Then sender.Text = mVal.Substring(0, 2) & "." & mVal.Substring(2, 1) & "_.____ __:__" : sender.SelectionStart = 4 : sender.SelectionLength = 1

If mVal.Length = 4 Then sender.Text = mVal.Substring(0, 2) & "." & mVal.Substring(2, 2) & ".____ __:__" : sender.SelectionStart = 6 : sender.SelectionLength = 4
If mVal.Length = 5 Then sender.Text = mVal.Substring(0, 2) & "." & mVal.Substring(2, 2) & "." & mVal.Substring(4, 1) & "___ __:__" : sender.SelectionStart = 7 : sender.SelectionLength = 3
If mVal.Length = 6 Then sender.Text = mVal.Substring(0, 2) & "." & mVal.Substring(2, 2) & "." & mVal.Substring(4, 2) & "__ __:__" : sender.SelectionStart = 8 : sender.SelectionLength = 2
If mVal.Length = 7 Then sender.Text = mVal.Substring(0, 2) & "." & mVal.Substring(2, 2) & "." & mVal.Substring(4, 3) & "_ __:__" : sender.SelectionStart = 9 : sender.SelectionLength = 1

If mVal.Length = 8 Then sender.Text = mVal.Substring(0, 2) & "." & mVal.Substring(2, 2) & "." & mVal.Substring(4, 4) & " __:__" : sender.SelectionStart = 11 : sender.SelectionLength = 2
If mVal.Length = 9 Then sender.Text = mVal.Substring(0, 2) & "." & mVal.Substring(2, 2) & "." & mVal.Substring(4, 4) & " " & mVal.Substring(8, 1) & "_:__" : sender.SelectionStart = 12 : sender.SelectionLength = 1

If mVal.Length = 10 Then sender.Text = mVal.Substring(0, 2) & "." & mVal.Substring(2, 2) & "." & mVal.Substring(4, 4) & " " & mVal.Substring(8, 2) & ":__" : sender.SelectionStart = 14 : sender.SelectionLength = 2

If e.KeyData <> Keys.Left And e.KeyData <> Keys.Right Then sender.SelectionStart = PosInTXT
End Sub


Процедура несовершенна, создавалась в попыхах, но работает удовлетворительно.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.