Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.79/14: Рейтинг темы: голосов - 14, средняя оценка - 4.79
sitcva
0 / 0 / 0
Регистрация: 02.06.2011
Сообщений: 3
1

DataGridView и календарь

07.06.2011, 13:08. Просмотров 2607. Ответов 3
Метки нет (Все метки)

Как в один из столбцов DataGridView вставить раскрывающийся календарь?Может с помощью DateTimePicker?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.06.2011, 13:08
Ответы с готовыми решениями:

Как добавить в DataGridView календарь
Здравствуйте!!! нужно в DataGridView добавить возможность выбора даты по...

Вывод информации в DataGridView в зависимости от выбора в другом DataGridView - C# Access
В 1м DataGridView У меня предприятия, при выборе какого-то 1 предприятия, во 2й...

Нажав на значение (строку) из одного DataGridView поиск в другом DataGridView
Всем привет. Есть 2 DataGridView в одном только дата, а во втором дата и много...

Подставить данные из combobox в DatagridView при создании новой записи в этом DatagridView
Здравствуйте! Возможно я плохо искал, но я искал ответ или наводку на решение....

Во втором DataGridView отобразить данные, используя значения выбранной строчки первого DataGridView
Доброго времени суток, Ув. Форумчане! Такой вопрос: Во во втором...

3
emppu2007
90 / 90 / 6
Регистрация: 04.05.2011
Сообщений: 171
07.06.2011, 16:29 2
В стандартном DataGridView не предусмотрено создавать поля для типа DateTime, чтобы в ячейке отображался компонент календаря DateTimePicker. Чтобы расширить функциональность DataGridView, необходимо унаследовать 3 класса: 1-й - от DataGridViewColumn, 2-й - от DataGridViewTextBoxCell и 3-й от DateTimePicker, реализовав в нём интерфейс IDataGridViewEditingControl. Пример реализации:
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
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, objectinitialFormattedValue, DataGridViewCellStyle dataGridViewCellStyle)
    {
        // Set the value of the editing control to the current cell value
        base.InitializeEditingControl(rowIndex, initialFormattedValue, dataGridViewCellStyle);
        CalendarEditingControl ctl = DataGridView.EditingControl asCalendarEditingControl;
 
        // Set row value when Value property is not null
        if (this.Value != null)
        {
            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 class CalendarEditingControl : DateTimePicker,IDataGridViewEditingControl
{
    private DataGridView _dataGridView;
    private bool _valueChanged;
    private 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(DataGridViewDataErrorContextscontext)
    {
        return EditingControlFormattedValue;
    }
 
    // Implements the IDataGridViewEditingControl.ApplyCellStyleToEditingControl method
    public void ApplyCellStyleToEditingControl(DataGridViewCellStyledataGridViewCellStyle)
    {
        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, booldataGridViewWantsInputKey)
    {
        // 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) { }
 
    // 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);
    }
}
Добавлено через 58 секунд
И вообще, в инете надо луркать как следует!
http://msdn.microsoft.com/en-us/library/7tas5c80.aspx
0
krupa
106 / 106 / 35
Регистрация: 13.12.2010
Сообщений: 407
07.06.2011, 16:51 3
скачиваешь этот файлик. подключаешь класс к своему проекту. делаешь Rebuild
далее в Дизайнере идёшь в Properties. Свойтсво - Columns
строишь свой Датагрид и уже где нужно вибираешь в свойство колонки её тип DataGridViewCalendarColumn.

Далее в Properties каждой колонки устанавливаешь в DataPropertieName название колонки таблицы, которую используешь в качестве DataSource

DataGridView и календарь

DataGridViewCalendarColumn.rar
1
AlexSudent
0 / 0 / 0
Регистрация: 03.06.2015
Сообщений: 1
03.06.2015, 12:40 4
Огромное спасибо

Добавлено через 1 час 13 минут
Вдогон: Если, кто будет использовать программу по ссылке, которую сделал уважаемый krupa, то для работы с базами данных, которые не поддерживают поля DateTime, а работают только со строками нужно заменить фрагмент кода

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 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.Parse(this.Value.ToString()); }
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.06.2015, 12:40

Вывод информации в DataGridView в зависимости от выбора в другом DataGridView
Прошу прощения сразу же потому что видел много тем похожих, но ответа так и не...

Нужно, чтобы при выборе элемента в одном DataGridView отображались связанные данные в другом DataGridView
Есть две связанные таблицы и соответственно два DataGridView, нужно, чтобы при...

DataGridView и Access, составить запрос для dataGridView
У меня есть БД Access, в ней таблица , а в таблице два столбца, один , другой ...


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

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

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