Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
botstars
2 / 3 / 2
Регистрация: 17.05.2013
Сообщений: 403
1

Какой тип использовать для даты в dataGridView?

01.06.2017, 09:23. Просмотров 398. Ответов 12
Метки нет (Все метки)

добрый день есть класс который я использую для dataGridView
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
 public class PersonnelDepartment
    {
        public int gs_n { get; set; }
        public string gs_secondName { get; set; }
        public string gs_name { get; set; }
        public string gs_age { get; set; }
        public string gs_date_of_recruitment { get; set; }
        public string gs_degree { get; set; }
        public string gs_department { get; set; }
 
        public PersonnelDepartment()
        {
 
        }
        public PersonnelDepartment(int gs_n, string gs_secondName, string gs_name, string gs_age, string gs_date_of_recruitmen, string gs_degree, string gs_department)
         {
            this.gs_n = gs_n;
            this.gs_secondName = gs_secondName;
            this.gs_name = gs_name;
            this.gs_age = gs_age;
            this.gs_date_of_recruitment = gs_date_of_recruitmen;
            this.gs_degree = gs_degree;
            this.gs_department = gs_department;
        }
        //public FitnesCentre()
        //{
 
        //}
    }
Так вот сейчас я использую даты тип string, мне нужно сделать метод который фильтрует данные. Дайте пример как сравнить две даты, я имею ввиду просто пример равенства и какой тип при этом использовать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.06.2017, 09:23
Ответы с готовыми решениями:

Какой тип данных использовать для listview
Всем привет. Есть listview1 в котором много строк и около 5 столбцов. Когда...

Использовать выбор даты в dataGridView как в DateTimePicker
есть данные отображающиеся в dataGridView. и 2 столбца имеют типа "дата"....

Какой тип использовать?
Всем привет! Подскажите пожалуйста какой тип мне поможет Есть массив...

Какой тип использовать для денежных коэффициентов (например процент скидки)? Decimal или Double?
Добрый день, возник вопрос, какой тип данных следует использовать для...

Выборка данных через сравнение даты в DataGridView и текущей даты
Ситуация такова: в датагриде есть столбец с определенной датой. Нужно сравнить...

12
Someone007
2227 / 1795 / 820
Регистрация: 09.05.2015
Сообщений: 4,431
Завершенные тесты: 1
01.06.2017, 09:25 2
DateTime.
0
botstars
2 / 3 / 2
Регистрация: 17.05.2013
Сообщений: 403
01.06.2017, 09:42  [ТС] 3
Someone007, спасибо а есть ли какие встроенные календари что бы легко пристроить в dataGridView

Добавлено через 21 секунду
Я в смысле выбора даты
0
Someone007
2227 / 1795 / 820
Регистрация: 09.05.2015
Сообщений: 4,431
Завершенные тесты: 1
01.06.2017, 09:43 4
DateTimePicker
https://msdn.microsoft.com/ru-ru/library/7tas5c80(v=vs.110).aspx
https://stackoverflow.com/questions/...a-datagridview
0
botstars
2 / 3 / 2
Регистрация: 17.05.2013
Сообщений: 403
01.06.2017, 10:09  [ТС] 5
Someone007, покажите, пожалуйста, как добавить datetimepicker в dataGridView если все создается программно вот класс
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
    public class PersonnelDepartment
    {
        public int gs_n { get; set; }
        public string gs_secondName { get; set; }
        public string gs_name { get; set; }
        public string gs_age { get; set; }
        public string gs_date_of_recruitment { get; set; }
        public string gs_degree { get; set; }
        public string gs_department { get; set; }
        public DateTime gs_dateOfDismissal { get; set; }
       
 
        public PersonnelDepartment()
        {
 
        }
        public PersonnelDepartment(int gs_n, string gs_secondName, string gs_name, string gs_age, string gs_date_of_recruitmen, string gs_degree, string gs_department, DateTime gs_dateOfDismissal)
         {
            this.gs_n = gs_n;
            this.gs_secondName = gs_secondName;
            this.gs_name = gs_name;
            this.gs_age = gs_age;
            this.gs_date_of_recruitment = gs_date_of_recruitmen;
            this.gs_degree = gs_degree;
            this.gs_department = gs_department;
            this.gs_dateOfDismissal = gs_dateOfDismissal;
        }
а вот так я добавляю колонки в dataGridView
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 ColumnName("gs_n", "№ записи");
            ColumnName("gs_secondName", "Фамилия");
            ColumnName("gs_name", "Имя");
            ColumnName("gs_age", "Дата рождения");
            ColumnName("gs_date_of_recruitment", "Прием на работу");
            ColumnName("gs_degree", "Должность");
            ColumnName("gs_department", "Факультет");
            ColumnName("gs_dateOfDismissal", "Уволен");
public void ColumnName(string ColumnName, string ColumnText)
        {
            dataGridView1.Columns.Add(new DataGridViewTextBoxColumn
            {
                DataPropertyName = ColumnName,
                HeaderText = ColumnText
            });
        }
Помогите

Добавлено через 8 минут
Ну или просто как колонке gs_dateOfDismissal присвоить datetimepicker
0
Someone007
2227 / 1795 / 820
Регистрация: 09.05.2015
Сообщений: 4,431
Завершенные тесты: 1
01.06.2017, 10:13 6
Просто для столбца, где дата создаете CalendarColumn из примера с MSDN вместо DataGridViewTextBoxColumn
C#
1
2
3
4
5
6
7
8
ColumnName("gs_dateOfDismissal", "Уволен", true);
 
public void ColumnName(string ColumnName, string ColumnText, bool isDateTime = false)
{
            var col = isDateTime ? new CalendarColumn()  { ... } : new DataGridViewTextBoxColumn() { DataPropertyName = ColumnName, HeaderText = ColumnText };
 
            dataGridView1.Columns.Add(col);
}
1
botstars
2 / 3 / 2
Регистрация: 17.05.2013
Сообщений: 403
01.06.2017, 11:51  [ТС] 7
Someone007, Это условие что вы мне дали я понял, я не могу понять так это отдельный класс создать нужно по примеру что вы дали или как-то в одну строчку все делается неужели нету просто присвоить элементу тип

Добавлено через 1 час 18 минут
Someone007, создал класc Calendar.cs туда засунул три класса из примера
C#
1
2
3
4
5
6
public class CalendarColumn : DataGridViewColumn
........................
public class CalendarCell : DataGridViewTextBoxCell
......................
class CalendarEditingControl : DateTimePicker, IDataGridViewEditingControl
...............
вставил ваш пример
C#
1
2
3
4
5
6
 public void ColumnName(string ColumnName, string ColumnText, bool isDateTime = false)
        {
           var col = isDateTime ? new CalendarColumn() { } : new DataGridViewTextBoxColumn() { DataPropertyName = ColumnName, HeaderText = ColumnText };
 
            dataGridView1.Columns.Add(col);
        }
и на всей строчке var col = isDateTime ? new CalendarColumn() { } : new DataGridViewTextBoxColumn() { DataPropertyName = ColumnName, HeaderText = ColumnText };
выдает ошибку не удается определить тип условного выражения так как неявного преобразования между WindowsFormsApp3.CalendarColumn и System.Windows.Forms.DataGridViewTextBoxColumn не существует
0
Someone007
2227 / 1795 / 820
Регистрация: 09.05.2015
Сообщений: 4,431
Завершенные тесты: 1
01.06.2017, 20:10 8
Пробуйте DataGridViewColumn вместо var.
0
botstars
2 / 3 / 2
Регистрация: 17.05.2013
Сообщений: 403
01.06.2017, 22:26  [ТС] 9
тоже самое
0
Someone007
2227 / 1795 / 820
Регистрация: 09.05.2015
Сообщений: 4,431
Завершенные тесты: 1
01.06.2017, 22:32 10
Тогда просто разбейте запись на несколько строк.
C#
1
2
3
4
5
6
7
8
9
10
           if (isDateTime)
           {
              var col = new CalendarColumn() { DataPropertyName = ColumnName, HeaderText = ColumnText };
              dataGridView1.Columns.Add(col);
           }
           else
           {
              var col = new DataGridViewTextBoxColumn() { DataPropertyName = ColumnName, HeaderText = ColumnText };
              dataGridView1.Columns.Add(col);
           }
1
botstars
2 / 3 / 2
Регистрация: 17.05.2013
Сообщений: 403
02.06.2017, 09:42  [ТС] 11
Someone007, Спасибо огромное есть еще вопрос почему у меня в поле добавления теперь отображаются во всех полях даты
Какой тип использовать для даты в dataGridView?

если нажать на редактирование то все исчезает и становится нормальным
0
botstars
2 / 3 / 2
Регистрация: 17.05.2013
Сообщений: 403
02.06.2017, 09:42  [ТС] 12
Какой тип использовать для даты в dataGridView?
0
botstars
2 / 3 / 2
Регистрация: 17.05.2013
Сообщений: 403
13.06.2017, 15:02  [ТС] 13
Someone007, использую класс который вы мне дали
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
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
public class CalendarColumn : DataGridViewColumn
    {
        public CalendarColumn() : base(new CalendarCell())
        {
        }
 
        public override DataGridViewCell CellTemplate
        {
            get
            {
                return base.CellTemplate;
            }
            set
            {
                // Ensure that the cell used for the template is a CalendarCell.
                if (value != null &&
                    !value.GetType().IsAssignableFrom(typeof(CalendarCell)))
                {
                    throw new InvalidCastException("Must be a CalendarCell");
                }
                base.CellTemplate = value;
            }
        }
    }
 
    public class CalendarCell : DataGridViewTextBoxCell
    {
 
        public CalendarCell()
            : base()
        {
            // Use the short date format.
            this.Style.Format = "d";
        }
 
        public override void InitializeEditingControl(int rowIndex, object
            initialFormattedValue, DataGridViewCellStyle dataGridViewCellStyle)
        {
            // Set the value of the editing control to the current cell value.
            base.InitializeEditingControl(rowIndex, initialFormattedValue,
                dataGridViewCellStyle);
            CalendarEditingControl ctl =
                DataGridView.EditingControl as CalendarEditingControl;
            // Use the default row value when Value property is null.
            if (this.Value == null)
            {
                ctl.Value = (DateTime)this.DefaultNewRowValue;
            }
            else
            {
                ctl.Value = (DateTime)this.Value;
            }
        }
 
        public override Type EditType
        {
            get
            {
                // Return the type of the editing control that CalendarCell uses.
                return typeof(CalendarEditingControl);
            }
        }
 
        public override Type ValueType
        {
            get
            {
                // Return the type of the value that CalendarCell contains.
 
                return typeof(DateTime);
            }
        }
 
        public override object DefaultNewRowValue
        {
            get
            {
                // Use the current date and time as the default value.
                return DateTime.Now;
            }
        }
    }
    class CalendarEditingControl : DateTimePicker, IDataGridViewEditingControl
    {
        DataGridView dataGridView;
        private bool valueChanged = false;
        int rowIndex;
 
        public CalendarEditingControl()
        {
            this.Format = DateTimePickerFormat.Short;
        }
 
        // Implements the IDataGridViewEditingControl.EditingControlFormattedValue 
        // property.
        public object EditingControlFormattedValue
        {
            get
            {
                return this.Value.ToShortDateString();
            }
            set
            {
                if (value is String)
                {
                    try
                    {
                        // This will throw an exception of the string is 
                        // null, empty, or not in the format of a date.
                        this.Value = DateTime.Parse((String)value);
                    }
                    catch
                    {
                        // In the case of an exception, just use the 
                        // default value so we're not left with a null
                        // value.
                        this.Value = DateTime.Now;
                    }
                }
            }
        }
 
        // Implements the 
        // IDataGridViewEditingControl.GetEditingControlFormattedValue method.
        public object GetEditingControlFormattedValue(
            DataGridViewDataErrorContexts context)
        {
            return EditingControlFormattedValue;
        }
 
        // Implements the 
        // IDataGridViewEditingControl.ApplyCellStyleToEditingControl method.
        public void ApplyCellStyleToEditingControl(
            DataGridViewCellStyle dataGridViewCellStyle)
        {
            this.Font = dataGridViewCellStyle.Font;
            this.CalendarForeColor = dataGridViewCellStyle.ForeColor;
            this.CalendarMonthBackground = dataGridViewCellStyle.BackColor;
        }
 
        // Implements the IDataGridViewEditingControl.EditingControlRowIndex 
        // property.
        public int EditingControlRowIndex
        {
            get
            {
                return rowIndex;
            }
            set
            {
                rowIndex = value;
            }
        }
 
        // Implements the IDataGridViewEditingControl.EditingControlWantsInputKey 
        // method.
        public bool EditingControlWantsInputKey(
            Keys key, bool dataGridViewWantsInputKey)
        {
            // Let the DateTimePicker handle the keys listed.
            switch (key & Keys.KeyCode)
            {
                case Keys.Left:
                case Keys.Up:
                case Keys.Down:
                case Keys.Right:
                case Keys.Home:
                case Keys.End:
                case Keys.PageDown:
                case Keys.PageUp:
                    return true;
                default:
                    return !dataGridViewWantsInputKey;
            }
        }
 
        // Implements the IDataGridViewEditingControl.PrepareEditingControlForEdit 
        // method.
        public void PrepareEditingControlForEdit(bool selectAll)
        {
            // No preparation needs to be done.
        }
 
        // Implements the IDataGridViewEditingControl
        // .RepositionEditingControlOnValueChange property.
        public bool RepositionEditingControlOnValueChange
        {
            get
            {
                return false;
            }
        }
 
        // Implements the IDataGridViewEditingControl
        // .EditingControlDataGridView property.
        public DataGridView EditingControlDataGridView
        {
            get
            {
                return dataGridView;
            }
            set
            {
                dataGridView = value;
            }
        }
 
        // Implements the IDataGridViewEditingControl
        // .EditingControlValueChanged property.
        public bool EditingControlValueChanged
        {
            get
            {
                return valueChanged;
            }
            set
            {
                valueChanged = value;
            }
        }
 
        // Implements the IDataGridViewEditingControl
        // .EditingPanelCursor property.
        public Cursor EditingPanelCursor
        {
            get
            {
                return base.Cursor;
            }
        }
 
        protected override void OnValueChanged(EventArgs eventargs)
        {
            // Notify the DataGridView that the contents of the cell
            // have changed.
            valueChanged = true;
            this.EditingControlDataGridView.NotifyCurrentCellDirty(true);
            base.OnValueChanged(eventargs);
        }
    }
Редактируются данные нормально но вот когда пытаюсь добавить новое значение даты выдает ошибку в строчке
C#
1
ctl.Value = (DateTime)this.Value;
System.ArgumentOutOfRangeException: "Значение '01.01.0001 0:00:00' недопустимо для 'Value'. 'Value' должно лежать в диапазоне от 'MinDate' до 'MaxDate'." в чем может быть проблема.
0
13.06.2017, 15:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.06.2017, 15:02

Какой алгоритм getHashCode использовать как для больших значений, так и для маленьких
Есть некий класс с какими-то числовыми полями. Причем значения полей могут...

Какой IP использовать для широковещательной рассылки
Здравствуйте! Нужно отправить широковещательное сообщение. Мой IP: 10.1.2.3...

Какой элемент использовать для отображения прогресса
Здравствуйте! Подскажите, как сделать, вот такое окно в С#


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru