Member 12349103 Ответов: 2

C# winform удалить дату из datagridview


У меня есть winform с базой данных datagridview MS Access. У меня есть 2 столбца, связанные с datetimepicker. В коде я копирую дату из одного столбца в другой, и скопированная ячейка пуста. когда я снова открываю форму, пустая ячейка показывает 12/30/1899. Как я могу оставить его пустым, пока не введу другую дату?

Это код, который я использую для копирования из одной ячейки в другую (нажатие кнопки)

private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
       {

           if (e.ColumnIndex == dataGridView1.Columns [19].Index)
           {

               {
                   dataGridView1.CurrentRow.Cells[16].Value = dataGridView1.CurrentRow.Cells[17].Value;
                   dataGridView1.CurrentRow.Cells[17].Value =  "";
               }
           }
       }
   }
   }


Что я уже пробовал:

Пользовательский формат
И
this.dateTimePicker1.Format = DateTimePickerFormat.Custom;
this.dateTimePicker1.CustomFormat = " "; //a string with one whitespace

0x01AA

Попробуйте назначить null вместо пустой строки.

2 Ответов

Рейтинг:
2

ashid das11

dataGridView1.CurrentRow.Ячейки[17].Value =null


Member 12349103

Он все еще показывает 12/30/1899, когда я снова открываю приложение / базу данных

ashid das11

Можете ли вы поделиться скриншотом до и после

Member 12349103

Как добавить снимки экрана?

Рейтинг:
1

0x01AA

Похоже, вам нужно реализовать CellFormatting Документы, которые вы можете найти здесь: Класс DataGridViewCellFormattingEventArgs (System.Окна.Формы) | Microsoft Docs[^]

Тогда ваша реализация будет выглядеть примерно так

private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs formatting)
{
   if (e.ColumnIndex == 17)
   {
       // Here the decision what we like to show as blank. Depending on the situation 
       // you may need also to check for null Value 
       //
       // Additinal this gives you also the option to compare Col16 with Col17
       // on equality which means you don't need to set Col17 to null or empty string
       if ((DateTime)dataGridView1.CurrentRow.Cells[17].Value == DateTime.MinValue)
       {
           formatting.Value= "";
       }
   }
}

Лучше работать с именами столбцов, чем с индексами
private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs formatting)
{
   if (this.dataGridView1.Columns[e.ColumnIndex].Name == "Column3")
   {
       if ((DateTime)dataGridView1.CurrentRow.Cells["Column3"].Value == DateTime.MinValue)
       {
           formatting.Value= "";
       }
   }
}


Member 12349103

Он по-прежнему показывает тот же результат. 12/30/1899