Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
17 / 17 / 3
Регистрация: 17.02.2010
Сообщений: 211

Ввод даты в DGV с автоматической расстановкой точек

20.04.2012, 15:08. Показов 2297. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.
Оператор набирает большой объем данных и попросил немного подправить ячейки ввода дат (дд.мм.гггг), таким образом, чтобы не вводить "точку" а просто забивать 8 цифирок. Подскажите как это можно реализовать? Мастером не пользуюсь, написано все ручками. Студия 2008 С#.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.04.2012, 15:08
Ответы с готовыми решениями:

Корректное отображение даты в DGV из БД
Как сделать так чтобы в ячейке datagridview дата отображалась полностью, то бишь с секундами? Поясню ситуацию, в бд oracle дата хранится в...

Избежать автоматического преобразования даты в DGV
Подскажите как правильно настроить формат в datagridview, считываются данные из базы нормально, но при сохранении в ячейках появляются...

Цвет ячейки DGV при корректирование даты
Пишу на C# winforms. У меня dataGridView. Сделал в dataGridView что бы дата загоралась красным когда сегодняшняя дата просрочена. (Сегодня...

10
1057 / 864 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
20.04.2012, 15:12
просто считывать строку и разбивать ее самостоятельно средствами класса string
0
17 / 17 / 3
Регистрация: 17.02.2010
Сообщений: 211
20.04.2012, 16:26  [ТС]
Learx, этот вариант ябы использовал еслибы ввод проводился в отдельных текстбоксах. А в моем случае оператор бъет данные в грид (табличная форма). Я просматривал инфу по гриду и не нашел нечто подобного, ну типа шаблона, т.е. в колонках даты былбы такой вид [ . . ] и при вводе, цифирки сами занимали положенные места последовательно. Это как прописать IP.
0
1057 / 864 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
20.04.2012, 16:43
а что тебе мешает перехватывать значение ячейки в ValueChanged? или при валидации?
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
20.04.2012, 17:55
Genadyi, смени формат данных в ячейке с даты на строку
0
17 / 17 / 3
Регистрация: 17.02.2010
Сообщений: 211
21.04.2012, 18:00  [ТС]
Спасибо всем за советы, я по наивности надеялся что это уже как-то реализовано (вроде шаблона).
Ну ежели других вариантов нет бум пробовать через стринг. Всем удачи.
0
 Аватар для XIST
1960 / 1070 / 148
Регистрация: 01.10.2009
Сообщений: 3,591
Записей в блоге: 1
22.04.2012, 22:35
Цитата Сообщение от nio Посмотреть сообщение
Genadyi, смени формат данных в ячейке с даты на строку
Я бы конечно не советовал, потом в отчете например, сортировать по дате нет возможности, будет то сортировать по string.

Вот где то было, например ковыряние стандартного контрола, формат ячейки дата значение из DteTimePicker
Сам пользуюсь, работает но есть один баг, при выборе два раза подряд текущей даты, дата в ячейку не сохраняется, нужно выбрать другое число а потом опять текущее, не разбирался, найдешь баг, выложи

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
Imports System
Imports System.Windows.Forms
 
Public Class CalendarColumn
    Inherits DataGridViewColumn
 
    Public Sub New()
        MyBase.New(New CalendarCell())
    End Sub
 
    Public Overrides Property CellTemplate() As DataGridViewCell
        Get
            Return MyBase.CellTemplate
        End Get
        Set(ByVal value As DataGridViewCell)
 
            ' Ensure that the cell used for the template is a CalendarCell.
            If (value IsNot Nothing) AndAlso _
                Not value.GetType().IsAssignableFrom(GetType(CalendarCell)) _
                Then
                Throw New InvalidCastException("Must be a CalendarCell")
            End If
            MyBase.CellTemplate = value
 
        End Set
    End Property
 
End Class
 
Public Class CalendarCell
    Inherits DataGridViewTextBoxCell
 
    Public Sub New()
        ' Use the short date format.
        Me.Style.Format = "d"
    End Sub
 
    Public Overrides Sub InitializeEditingControl(ByVal rowIndex As Integer, _
        ByVal initialFormattedValue As Object, _
        ByVal dataGridViewCellStyle As DataGridViewCellStyle)
 
        ' Set the value of the editing control to the current cell value.
        MyBase.InitializeEditingControl(rowIndex, initialFormattedValue, _
            dataGridViewCellStyle)
 
        Dim ctl As CalendarEditingControl = _
            CType(DataGridView.EditingControl, CalendarEditingControl)
 
        ' Use the default row value when Value property is null.
        If (Me.Value Is Nothing) Then
            ctl.Value = CType(Me.DefaultNewRowValue, DateTime)
        Else
            ctl.Value = CType(Me.Value, DateTime)
        End If
    End Sub
 
    Public Overrides ReadOnly Property EditType() As Type
        Get
            ' Return the type of the editing control that CalendarCell uses.
            Return GetType(CalendarEditingControl)
        End Get
    End Property
 
    Public Overrides ReadOnly Property ValueType() As Type
        Get
            ' Return the type of the value that CalendarCell contains.
            Return GetType(DateTime)
        End Get
    End Property
 
    Public Overrides ReadOnly Property DefaultNewRowValue() As Object
        Get
            ' Use the current date and time as the default value.
            Return DateTime.Now
        End Get
    End Property
 
End Class
 
Class CalendarEditingControl
    Inherits DateTimePicker
    Implements IDataGridViewEditingControl
 
    Private dataGridViewControl As DataGridView
    Private valueIsChanged As Boolean = False
    Private rowIndexNum As Integer
 
    Public Sub New()
        Me.Format = DateTimePickerFormat.Short
    End Sub
 
    Public Property EditingControlFormattedValue() As Object _
        Implements IDataGridViewEditingControl.EditingControlFormattedValue
 
        Get
            Return Me.Value.ToShortDateString()
        End Get
 
        Set(ByVal value As Object)
            Try
                ' This will throw an exception of the string is 
                ' null, empty, or not in the format of a date.
                Me.Value = DateTime.Parse(CStr(value))
            Catch
                ' In the case of an exception, just use the default
                ' value so we're not left with a null value.
                Me.Value = DateTime.Now
            End Try
        End Set
 
    End Property
 
    Public Function GetEditingControlFormattedValue(ByVal context _
        As DataGridViewDataErrorContexts) As Object _
        Implements IDataGridViewEditingControl.GetEditingControlFormattedValue
 
        Return Me.Value.ToShortDateString()
 
    End Function
 
    Public Sub ApplyCellStyleToEditingControl(ByVal dataGridViewCellStyle As _
        DataGridViewCellStyle) _
        Implements IDataGridViewEditingControl.ApplyCellStyleToEditingControl
 
        Me.Font = dataGridViewCellStyle.Font
        Me.CalendarForeColor = dataGridViewCellStyle.ForeColor
        Me.CalendarMonthBackground = dataGridViewCellStyle.BackColor
 
    End Sub
 
    Public Property EditingControlRowIndex() As Integer _
        Implements IDataGridViewEditingControl.EditingControlRowIndex
 
        Get
            Return rowIndexNum
        End Get
        Set(ByVal value As Integer)
            rowIndexNum = value
        End Set
 
    End Property
 
    Public Function EditingControlWantsInputKey(ByVal key As Keys, _
        ByVal dataGridViewWantsInputKey As Boolean) As Boolean _
        Implements IDataGridViewEditingControl.EditingControlWantsInputKey
 
        ' Let the DateTimePicker handle the keys listed.
        Select Case key And Keys.KeyCode
            Case Keys.Left, Keys.Up, Keys.Down, Keys.Right, _
                Keys.Home, Keys.End, Keys.PageDown, Keys.PageUp
 
                Return True
 
            Case Else
                Return Not dataGridViewWantsInputKey
        End Select
 
    End Function
 
    Public Sub PrepareEditingControlForEdit(ByVal selectAll As Boolean) _
        Implements IDataGridViewEditingControl.PrepareEditingControlForEdit
 
        ' No preparation needs to be done.
 
    End Sub
 
    Public ReadOnly Property RepositionEditingControlOnValueChange() _
        As Boolean Implements _
        IDataGridViewEditingControl.RepositionEditingControlOnValueChange
 
        Get
            Return False
        End Get
 
    End Property
 
    Public Property EditingControlDataGridView() As DataGridView _
        Implements IDataGridViewEditingControl.EditingControlDataGridView
 
        Get
            Return dataGridViewControl
        End Get
        Set(ByVal value As DataGridView)
            dataGridViewControl = value
        End Set
 
    End Property
 
    Public Property EditingControlValueChanged() As Boolean _
        Implements IDataGridViewEditingControl.EditingControlValueChanged
 
        Get
            Return valueIsChanged
        End Get
        Set(ByVal value As Boolean)
            valueIsChanged = value
        End Set
 
    End Property
 
    Public ReadOnly Property EditingControlCursor() As Cursor _
        Implements IDataGridViewEditingControl.EditingPanelCursor
 
        Get
            Return MyBase.Cursor
        End Get
 
    End Property
 
    Protected Overrides Sub OnValueChanged(ByVal eventargs As EventArgs)
 
        ' Notify the DataGridView that the contents of the cell have changed.
        valueIsChanged = True
        Me.EditingControlDataGridView.NotifyCurrentCellDirty(True)
        MyBase.OnValueChanged(eventargs)
 
    End Sub
 
End Class
 
Public Class Form1
    Inherits Form
 
    Private dataGridView1 As New DataGridView()
 
    <STAThreadAttribute()> _
    Public Shared Sub Main()
        Application.Run(New Form1())
    End Sub
 
    Public Sub New()
        Me.dataGridView1.Dock = DockStyle.Fill
        Me.Controls.Add(Me.dataGridView1)
        Me.Text = "DataGridView calendar column demo"
    End Sub
 
    Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) _
        Handles Me.Load
 
        Dim col As New CalendarColumn()
        Me.dataGridView1.Columns.Add(col)
        Me.dataGridView1.RowCount = 5
        Dim row As DataGridViewRow
        For Each row In Me.dataGridView1.Rows
            row.Cells(0).Value = DateTime.Now
        Next row
 
    End Sub
 
End Class
0
17 / 17 / 3
Регистрация: 17.02.2010
Сообщений: 211
23.04.2012, 13:00  [ТС]
Менять поле на стринг мне не очень подходит, вставлять TimePicker - это тоже не годится, повторюсь - операторы наотрез отказываются работать с календарем, мотивация -скорость ввода падает. А когда вводят (на русском) цифровая клава вместо точки бьет зпт! Так что щас пытаюсь придумать через стринг (ну это уже по свободе). Всем спасибо за участие. Удачи всем.
0
 Аватар для _katon_
414 / 265 / 25
Регистрация: 03.10.2011
Сообщений: 1,094
23.04.2012, 15:10
Можно настроить обработчик событий на изменение текста в TextBox. При добавлении удалении любого символа можно проверять уже введенную строку на валидность и при необходимости добавлять точки
0
17 / 17 / 3
Регистрация: 17.02.2010
Сообщений: 211
23.04.2012, 16:56  [ТС]
_katon_ осмелюсь поправить, не текстбокс а колумны(с датой) а при выходе из редактирования запускать обработчик события вроде как CellParsing (времени пока нет проверить).
0
17 / 17 / 3
Регистрация: 17.02.2010
Сообщений: 211
25.04.2012, 09:22  [ТС]
Все получилось как и хотел
Может кому пригодится:
объявляем метод(при выходе из ячейки)
C#
1
dataGridView1.CellParsing += new DataGridViewCellParsingEventHandler(dataGridView1_CellParsing);
и дальше
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
        void dataGridView1_CellParsing(object sender, DataGridViewCellParsingEventArgs e)
        {
            //throw new NotImplementedException();
            int k = dataGridView1.Columns[e.ColumnIndex].DisplayIndex;
            if (k == 4 | k == 7 | k == 8)
            {
                if (e != null)
                {
                    if (e.Value != null)
                    {
                        try
                        {
                            string Ddatin, Ddatout;
                            Ddatin = Convert.ToString(e.Value);
                            Ddatout = "";
                            if (Ddatin.Length < 9)
                            {
                                Ddatout = Ddatin.Substring(0, 2) + "." + Ddatin.Substring(2, 2) + "." + Ddatin.Substring(4);
                                e.Value = Convert.ToDateTime(Ddatout);
                            }
                            e.ParsingApplied = true;
 
                        }
                        catch (FormatException)
                        {
                            e.ParsingApplied = false;
                        }
                    }
                }
            }
        }
получилось достаточно просто, всем спасибо за помощь!!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.04.2012, 09:22
Помогаю со студенческими работами здесь

Запретить ввод даты в MaskedTextBox1 больше текущей даты
На форме MaskedTextBox1 с маской под короткую дату, то есть __.__.____ Как запретить ввод в это поле даты, больше текущей даты? заранее...

Нужно настроить ввод даты в delphi в dbGrid, в ручную через edit. Добавление новой даты.
Добрый день. Прошу о помощи. У меня на форме есть dbGrid. Мне нужно, чтобы третья колонка была формата dd/mm/gggg. Если я сама заполняю БД...

Ввод только чисел в DGV
нашёл много всяких примеров, но не один не работает. У меня есть таблица DGV, в ячейки должны вводиться только числа (дробные через...

Расстановкой коробок на столе.
Имеется стол прямоугольной формы размером a*b (a и b - целые числа, a&gt;b), В каком случае на столе можно разместить большее кол-во картонных...

Запутался с расстановкой связей
Здравствуйте, Запутался с расстановкой связей. Есть тип товара Диски, Шины, Прочие. У диска и у шин разные типы характеристик. Шины:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru