Простым решением было бы использовать для этого столбец string
в сетке.
Я уверен, что проблема исходит от List<DateTime>
... Когда вы используете List<T>
в качестве DataSource
к сетке (верхняя сетка), сетка будет использовать каждое (не относящееся к коллекции) «свойство» в T
в качестве столбца в сетке.Это можно увидеть в верхней сетке.При использовании DateTime
в качестве T
будет отображаться «Дата» в качестве столбца 0, «День» в качестве столбца 1, «DayOfWeek» в качестве столбца 2… и т. Д. Будет столбец для «часов», «минут» и секунд.(См. Рисунок).
![enter image description here](https://i.stack.imgur.com/HP8qj.jpg)
Я предполагаю, что проблема может быть связана с тем, что первое «свойство» в объекте DateTime
объект DateTime
с именем «Дата», однако для этого объекта «Дата» DateTime
его «Время» установлено на 12:00. Следовательно, строка кода grid.Columns[0].DefaultCellStyle.Format = "dd/MM/yyyy HH:mm";
… всегда будет отображать это значение времени 00:00.представляющие 12:00. Значения «времени», которые мы ищем, взяты из объекта «this» DateTime
, которые хранятся в его свойствах Hours, Minutes и Seconds.Эти значения свойств находятся в других столбцах.
С учетом сказанного я предлагаю вам попробовать DataTable
со столбцом DateTime
вместо List<DateTime>
.(нижняя сетка) Это должно не только решить текущую проблему, но и немного упростить ситуацию.Сначала в код добавляется глобальная DataTable
переменная dataTable
, а вторая форма добавляется в форму для использования новой таблицы данных.Столбец DateTime
для этой таблицы добавляется в событие Form1_Load
.В событии нажатия кнопки та же самая переменная «input», используемая для List
, добавляется к строкам dataTable
.Второй источник данных сеток установлен на dataTable
, затем, наконец, устанавливается формат первого столбца сеток.Я надеюсь, что это имеет смысл.
private List<DateTime> dates;
private BindingList<DateTime> bDates;
private BindingSource dSource;
private DataTable dataTable = new DataTable();
public Form1() {
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e) {
dates = new List<DateTime>();
dtpDate.Format = DateTimePickerFormat.Custom;
dtpDate.CustomFormat = "dd/MM/yyyy";
dtpTime.Format = DateTimePickerFormat.Custom;
dtpTime.CustomFormat = "hh:mm";
dtpTime.ShowUpDown = true;
dataTable.Columns.Add("Date", typeof(DateTime));
}
private void button1_Click(object sender, EventArgs e) {
DateTime input = dtpDate.Value.Date + dtpTime.Value.TimeOfDay;
MessageBox.Show(input.ToString()); //This shows the date correctly
dates.Add(input);
bDates = new BindingList<DateTime>(dates);
dSource = new BindingSource(bDates, null);
grid.DataSource = dSource;
grid.Columns[0].DefaultCellStyle.Format = "dd/MM/yyyy HH:mm";
// using datatable on second grid
dataTable.Rows.Add(input);
grid2.DataSource = dataTable;
grid2.Columns[0].DefaultCellStyle.Format = "dd/MM/yyyy hh:mm:ss tt";
}