none
访问数据库并 放入ObservableCollection 显示在界面上 但报错InvalidCastException RRS feed

  • 问题

  • 代码类似这样的var d = from DealTableClass deal in DBContext.mydealstable select deal; DealsObserverCollection mydealOC = new DealsObserverCollection(); mydealOC.DealTableOC = new ObservableCollection<DealTableClass>(d); newlist.DataContext = mydealOC; 运行之后报错第三行,意思是转换错误吗?我仔细看了之前存储的代码没有问题,类型应该也没有问题求教啊
    补充一下System.InvalidCastException was unhandled
      Message=InvalidCastException
      StackTrace:
           at System.Data.SqlServerCe.SqlCeDataReader.GetString(Int32 ordinal)
           at Read_DealTableClass()
           at System.Data.Linq.SqlClient.ObjectReaderCompiler.ObjectReader`3.MoveNext()
           at System.Collections.ObjectModel.ObservableCollection`1.CopyFrom(IEnumerable`1 collection)
           at System.Collections.ObjectModel.ObservableCollection`1..ctor(IEnumerable`1 collection)
           at GZT.MainPage.shownews()
           at GZT.MainPage.mylashouWebClient_OpenReadCompleted(Object sender, OpenReadCompletedEventArgs e)
           at System.Net.WebClient.OnOpenReadCompleted(OpenReadCompletedEventArgs e)
           at System.Net.WebClient.OpenReadOperationCompleted(Object arg)
           at System.Reflection.RuntimeMethodInfo.InternalInvoke(RuntimeMethodInfo rtmi, Object obj, BindingFlags invokeAttr, Binder binder, Object parameters, CultureInfo culture, Boolean isBinderDefault, Assembly caller, Boolean verifyAccess, StackCrawlMark& stackMark)
           at System.Reflection.RuntimeMethodInfo.InternalInvoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, StackCrawlMark& stackMark)
           at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)
           at System.Delegate.DynamicInvokeOne(Object[] args)
           at System.MulticastDelegate.DynamicInvokeImpl(Object[] args)
           at System.Delegate.DynamicInvoke(Object[] args)
           at System.Windows.Threading.DispatcherOperation.Invoke()
           at System.Windows.Threading.Dispatcher.Dispatch(DispatcherPriority priority)
           at System.Windows.Threading.Dispatcher.OnInvoke(Object context)
           at System.Windows.Hosting.CallbackCookie.Invoke(Object[] args)
           at System.Windows.Hosting.DelegateWrapper.InternalInvoke(Object[] args)
           at System.Windows.RuntimeHost.ManagedHost.InvokeDelegate(IntPtr pHandle, Int32 nParamCount, ScriptParam[] pParams, ScriptParam& pResult)
    • 已编辑 qin_msdn 2011年12月7日 13:59 补充
    2011年12月7日 13:34

答案

  • 你好啊,请修改你的代码成为这样:

     var OC = new ObservableCollection<DealTableClass>(d);

    mydealOC.DealTableOC=OC;

    然后如果var OC = new ObservableCollection<DealTableClass>(d);没有报错的话,请在mydealOC.DealTableOC=OC;前面添加断点.

    按Ctrl+Shift+I调出ImmediateWindow界面,敲入mydealOC.DealTableOC,然后回车.

    窗口中会跳出mydealOC.DealTableOC的类型,并检查是否为ObservableCollection<DealTableClass>.

    不过不是,那么错误就在这里,请使用相依的类型.

    如果您仍旧有问题,请联系我,希望我的回复可以帮助到您.

    • 已标记为答案 qin_msdn 2011年12月8日 6:54
    2011年12月8日 6:00

全部回复

  • 你好啊,请修改你的代码成为这样:

     var OC = new ObservableCollection<DealTableClass>(d);

    mydealOC.DealTableOC=OC;

    然后如果var OC = new ObservableCollection<DealTableClass>(d);没有报错的话,请在mydealOC.DealTableOC=OC;前面添加断点.

    按Ctrl+Shift+I调出ImmediateWindow界面,敲入mydealOC.DealTableOC,然后回车.

    窗口中会跳出mydealOC.DealTableOC的类型,并检查是否为ObservableCollection<DealTableClass>.

    不过不是,那么错误就在这里,请使用相依的类型.

    如果您仍旧有问题,请联系我,希望我的回复可以帮助到您.

    • 已标记为答案 qin_msdn 2011年12月8日 6:54
    2011年12月8日 6:00
  • 用了您的方法,在mydealOC.DealTableOC=OC之后  在immedite显示的状况如下,

    {System.Collections.ObjectModel.ObservableCollection<GZT.DealTableClass>}
        base {System.Collections.ObjectModel.Collection<GZT.DealTableClass>}: {System.Collections.ObjectModel.ObservableCollection<GZT.DealTableClass>}
        _busy: false
        CollectionChanged: null
        PropertyChanged: null

    但是有一点不明白,在界面上面有个listbox里面的所包含的textblock控件也用了binding了属性名称  但是界面上面就是不显示我后面用了   listbox1.datacontext=mydealOC;

     

    2011年12月8日 6:48
  • 你好啊,请修改你的代码成为这样:

     var OC = new ObservableCollection<DealTableClass>(d);

    mydealOC.DealTableOC=OC;

    然后如果var OC = new ObservableCollection<DealTableClass>(d);没有报错的话,请在mydealOC.DealTableOC=OC;前面添加断点.

    按Ctrl+Shift+I调出ImmediateWindow界面,敲入mydealOC.DealTableOC,然后回车.

    窗口中会跳出mydealOC.DealTableOC的类型,并检查是否为ObservableCollection<DealTableClass>.

    不过不是,那么错误就在这里,请使用相依的类型.

    如果您仍旧有问题,请联系我,希望我的回复可以帮助到您.


    用了您的方法,在mydealOC.DealTableOC=OC之后 在immedite显示的状况如下,

    {System.Collections.ObjectModel.ObservableCollection<GZT.DealTableClass>}
    base {System.Collections.ObjectModel.Collection<GZT.DealTableClass>}: {System.Collections.ObjectModel.ObservableCollection<GZT.DealTableClass>}
    _busy: false
    CollectionChanged: null
    PropertyChanged: null

    但是有一点不明白,在界面上面有个listbox里面的所包含的textblock控件也用了binding了属性名称 但是界面上面就是不显示我后面用了 listbox1.datacontext=mydealOC;

    2011年12月8日 6:48
  • ...我前面搞错了,我当你是第三行代码报错.

    你的意思是 listbox1.datacontext=mydealOC;报错么

    如果是的可以提供你的DealTableClass代码和listbox1的xaml代码么

    2011年12月8日 6:52
  • ...我前面搞错了,我当你是第三行代码报错.

    你的意思是 listbox1.datacontext=mydealOC;报错么

    如果是的可以提供你的DealTableClass代码和listbox1的xaml代码么


    我已经搞定了,我前面绑定错了 list的itemsource 这个应该绑定的是我的observerCollection的子属性的,我弄错了,现在好了一切正常,显示的正常非常感谢,
    另外这个msdn的论坛直接回复某个对话 框 究竟是回复这个对话框的人还是回复的是帖子啊。我直接点击您的对话框下面的回复你能收到回复吗
    • 已编辑 qin_msdn 2011年12月8日 6:58
    2011年12月8日 6:57
  • 我已经搞定了,我前面绑定错了 list的itemsource 这个应该绑定的是我的observerCollection的子属性的,我弄错了,现在好了一切正常,显示的正常非常感谢,
    2011年12月8日 6:57