首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ObjectListView在SetObjects()上抛出InvalidCastException

ObjectListView在SetObjects()上抛出InvalidCastException
EN

Stack Overflow用户
提问于 2019-09-17 03:35:35
回答 1查看 136关注 0票数 0

这个异常是通过匿名错误跟踪系统报告的,所以我没有任何关于它的额外信息。

代码语言:javascript
复制
System.InvalidCastException 
An object of type 'ListViewSubItem' cannot be converted to type 'BrightIdeasSoftware.OLVListSubItem'.
BrightIdeasSoftware.OLVListItem in get_HasAnyHyperlinks within ObjectListView, Version=2.9.1.1072, Culture=neutral, PublicKeyToken=b1c5bf581481bcd4
BrightIdeasSoftware.ObjectListView in PostProcessOneRow within ObjectListView, Version=2.9.1.1072, Culture=neutral, PublicKeyToken=b1c5bf581481bcd4
BrightIdeasSoftware.ObjectListView in PostProcessRows within ObjectListView, Version=2.9.1.1072, Culture=neutral, PublicKeyToken=b1c5bf581481bcd4
BrightIdeasSoftware.ObjectListView in BuildList within ObjectListView, Version=2.9.1.1072, Culture=neutral, PublicKeyToken=b1c5bf581481bcd4
BrightIdeasSoftware.ObjectListView in SetObjects within ObjectListView, Version=2.9.1.1072, Culture=neutral, PublicKeyToken=b1c5bf581481bcd4

你知道这是什么原因吗?

编辑:据我所知,被标记为重复的问题没有帮助。也许值得一提的是,我们只看到了一次这种异常,而有数百个用户。因此,这似乎是某种边缘情况。

EN

回答 1

Stack Overflow用户

发布于 2019-09-17 15:45:10

问题似乎出现在OLVListItem.cs的HasAnyHyperlinks中:

代码语言:javascript
复制
        /// <summary>
        /// Gets whether any cell on this item is showing a hyperlink
        /// </summary>
        public bool HasAnyHyperlinks {
            get {
                foreach (OLVListSubItem subItem in this.SubItems) {
                    if (!String.IsNullOrEmpty(subItem.Url))
                        return true;
                }
                return false;
            }
        }

只有代码库中的调用似乎在ObjectListView.cs中的PostProcessOneRow中(这与堆栈跟踪相匹配)。

呼叫方线路为:

代码语言:javascript
复制
            if (this.UseHyperlinks && olvi.HasAnyHyperlinks) {
                PropagateFormatFromRowToCells(olvi);
                this.ApplyHyperlinkStyle(olvi);

因此,您可以通过将UseHyperlinks设置为false (如果您没有任何设置)来避免此问题。

或者,您可以在调用SetObjects的地方放置一个try/catch,然后重试(假设堆栈跟踪中有一些遗漏的专有帧)。

最后,ObjectListView.PostProcessOneRow是虚拟的,所以您可以通过对ObjectListView进行子类化并编写自定义实现来解决它(尽管是在工程上讨论)。

在复制/理解问题方面

OLVListItem继承自ListViewItem,而SubItems位于基类和公共类上。因此,如果有人以某种方式手动添加常规的windows ListViewSubItems,而不是olv one (OLVListSubItem),这就说明了问题。也许可以检查一下您的代码是否没有引用该属性。

如果不是,那么想必一些windows的魔法可能会扰乱这个属性?他们运行的是什么windows版本,机器上有没有奇怪的软件?对于该用户,这种情况是一直发生还是只发生一次?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57963361

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档