teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

追記

2018/08/21 12:49

投稿

YAmaGNZ
YAmaGNZ

スコア10665

answer CHANGED
@@ -21,4 +21,6 @@
21
21
  以下略
22
22
  ```
23
23
 
24
- ですので、質問者さんが挙げておられる回避策などでデフォルトの変換を行わないようにするしかないと思われます。
24
+ ですので、質問者さんが挙げておられる回避策などでデフォルトの変換を行わないようにするしかないと思われます。
25
+
26
+ ちなみに、style.Formatを指定した場合は`Tostring(style.Format,style.FormatProvider)`で変換されるようです。

1

追記修正

2018/08/21 12:49

投稿

YAmaGNZ
YAmaGNZ

スコア10665

answer CHANGED
@@ -1,5 +1,3 @@
1
- Frameworkのソースを読んでいる途中ですが、現在分かったことをまとめておきます。
2
-
3
1
  データソースの型をDateTime型とし、値をDateTime.MinValueとすると空白表示される。
4
2
  そのCellのFormattedValueがすでに`string.Empty`となっている。
5
3
 
@@ -9,4 +7,18 @@
9
7
  ```C#
10
8
  Console.WriteLine(TypeDescriptor.GetConverter(typeof(DateTime)).ConvertToString(DateTime.MinValue));
11
9
  ```
12
- DateTimeConverterにてMinValueが何故`string.Empty`となるかまでは調査しきれていません
10
+ DateTimeConverterにてMinValueの時は`string.Empty`を返すよう実装されていました
11
+
12
+ compmod\system\componentmodel\DateTimeConverter.cs
13
+ ```C#
14
+ public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) {
15
+ if (destinationType == typeof(string) && value is DateTime) {
16
+ DateTime dt = (DateTime) value;
17
+ if (dt == DateTime.MinValue) {
18
+ return string.Empty;
19
+ }
20
+
21
+ 以下略
22
+ ```
23
+
24
+ ですので、質問者さんが挙げておられる回避策などでデフォルトの変換を行わないようにするしかないと思われます。