这个异常是通过匿名错误跟踪系统报告的,所以我没有任何关于它的额外信息。
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你知道这是什么原因吗?
编辑:据我所知,被标记为重复的问题没有帮助。也许值得一提的是,我们只看到了一次这种异常,而有数百个用户。因此,这似乎是某种边缘情况。
发布于 2019-09-17 15:45:10
问题似乎出现在OLVListItem.cs的HasAnyHyperlinks中:
/// <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中(这与堆栈跟踪相匹配)。
呼叫方线路为:
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版本,机器上有没有奇怪的软件?对于该用户,这种情况是一直发生还是只发生一次?
https://stackoverflow.com/questions/57963361
复制相似问题