none
Nullable型のプロパティーをバインディングしたい RRS feed

  • 全般的な情報交換

  • VisualStudio2005&.NetFramework2.0上でC#を使用し、WindowsForms開発を行っています。

     

    このたび、カスタムコントロールに追加したNullabe<Datetime>のプロパティーと、

    自作クラスのNullable<Datetime>のプロパティーをバインディングしようとしたのですが、次のエラーが発生してしまいます。

     

    //エラーの発生したコード

    Binding binding = customControl1.DataBindings.Add("Value", list, "Date");

     

    //発生したエラー

    System.DateTime' から 'System.Nullable`1[[System.DateTime, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]' への無効なキャストです。

    //StackTrace

    場所 System.Convert.DefaultToType(IConvertible value, Type targetType, IFormatProvider provider)
    場所 System.DateTime.System.IConvertible.ToType(Type type, IFormatProvider provider)
    場所 System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider)
    場所 System.Windows.Forms.Binding.FormatObject(Object value)
    場所 System.Windows.Forms.Binding.PushData(Boolean force)
    場所 System.Windows.Forms.Binding.UpdateIsBinding()
    場所 System.Windows.Forms.Binding.CheckBinding()
    場所 System.Windows.Forms.Binding.SetListManager(BindingManagerBase bindingManagerBase)
    場所 System.Windows.Forms.ListManagerBindingsCollection.AddCore(Binding dataBinding)
    場所 System.Windows.Forms.BindingsCollection.Add(Binding binding)
    場所 System.Windows.Forms.BindingContext.UpdateBinding(BindingContext newBindingContext, Binding binding)
    場所 System.Windows.Forms.Binding.SetBindableComponent(IBindableComponent value)
    場所 System.Windows.Forms.ControlBindingsCollection.AddCore(Binding dataBinding)
    場所 System.Windows.Forms.ControlBindingsCollection.Add(String propertyName, Object dataSource, String dataMember, Boolean formattingEnabled, DataSourceUpdateMode updateMode, Object nullValue, String formatString, IFormatProvider formatInfo)

    コントロール側と自作クラス側のプロパティーは両方とも同じ型なので、

    型変換は不要なはずなのと、もし変換が必要でも、DatetimeとDatetime?は暗黙的に変換されるはずなので、

    エラーは出るのは腑に落ちないですが、エラーを出さずにバインディングすることはできないのでしょうか?

     

    2008年7月19日 7:33

すべての返信

  • 自己解決しました。

    Binding binding = customControl1.DataBindings.Add("Value", list, "Date", true);

    とすることでエラーは発生しなくなりました。
    2008年7月25日 13:05
  • こんにちは、フォーラムオペレータ大久保です。

     

    泥爺 さん、情報をありがとうございます!

    このスレッドを他の方にも役立てていただきたく、メッセージの種類を「コメント」に変更させていただきました。

     

    また何かありましたら、MSDN フォーラムのことを思い出していただければうれしいです。

    それでは

    2008年8月22日 3:52