【问题标题】:Red Cross in DevExpress XtraGridDevExpress XtraGrid 中的红十字会
【发布时间】:2013-04-19 14:23:11
【问题描述】:

有时 XtraGrid 会得到一个红十字而不是数据。 (http://www.devexpress.com/Support/Center/p/CB4246.aspxhttp://www.devexpress.com/Support/Center/p/A884.aspx 等等)

我已启用中断异常(Ctrl+D、E、选择所有异常)-但不确定是否会发生其他任何事情,以便红线出现。

如果您处于“XtraGrid 显示红色 X”状态,是否有一种简单的方法可以让 XtraGrid 再次工作(据我所知,仅关闭表单并重新打开它会有所帮助)。

我正在寻找类似的东西

 GridView gridView = this. GridViewXYZ(objectview);
 // objectView is refreshed
 gridView.RefreshData(); // <- this can thorw an exception that data is not available / UI will get an red cross
 // ??? do something to reset the gridView in a workig condition

【问题讨论】:

  • 你是通过 OnPaint 方法绘制的吗?这可能会导致[红十字错误][1]。 [1]:stackoverflow.com/questions/1000052/…
  • 你能告诉我们抛出错误的代码和你得到的错误吗?
  • @AlwaysLearning 这与代码抛出错误无关。大多数情况下,抛出错误并知道错误可以修复之前的状态。这是关于错误已经出现时的状态。问题只出现在客户身上总是会发生(同样地,您测试程序的效果如何)。客户不应该被自发的红十字元素所困扰,这些元素只会被一些巫毒教所消失。所以寻找一种方法来从错误状态中恢复。像“如果“错误”则记录“错误”撤消“最后操作”这样的模式
  • @Offer 我不认为这是巫术,我认为客户的 DLL 已过时,或者程序正试图从其本机线程之外的线程加载数据到 GUI。它总是与错误有关。
  • 让我解释一下我所说的伏都教是什么意思。如果发生某些事情以致出现红色 coss,这对客户来说是黑魔法,该怎么做才能做进一步的工作。此外,目前尚不清楚是否还有其他原因,然后是众所周知的出现红十字的原因。也许是时候覆盖 XtraGrid 的内部错误处理的完整废话了。如果不存在某些东西,则不应出现红十字 - 一个可处理的 exeptino -o.k。一些行解释说他们的数据无法显示 - 也可以。红十字会——废话。

标签: c# devexpress


【解决方案1】:

根据我之前的 GDI 经验,一旦你处于这种状态,你就会陷入困境。你做了一些在 GDI 中引起问题的事情,但它没有设法抛出异常/从中恢复。

关闭/重新打开表单的行为会导致释放并重新创建非托管 GDI 对象,因此 GDI 再次完全可操作,直到发生相同的错误情况。如果您无法阻止此错误,您可以尝试为表单/控件重新创建一个新的 GDI 对象,但我不确定您将如何去做。

这确实是 DevExpress 团队应该解决的错误。

【讨论】:

    【解决方案2】:

    您可以尝试在 Grid 上拨打BeginInvoke

    Action a = () => gridView.RefreshData();
    gridView.GridControl.BeginInvoke(a);
    

    每当摆弄数据源时,您可以尝试将其包装在这样的语句中。

    我已经过期了一些类似的东西,你会惊讶于这样的东西的工作频率。

    【讨论】:

    • REfreshData() 的类型为 void。如果我尝试您的解决方案,我只会得到:从“void”类型到 Action 的隐式转换是不可能的。
    • 但是Action不应该指向返回void的方法吗? devexpress 的东西是'public override void RefreshData(); '
    • 是的,你是对的 - 我更新了答案。我的语法错误 -sry
    • 我很好奇它是否有帮助,因为没有“InvokeRequired”,因为数据网格刷新是特别在 ui 线程中完成的。尝试解决已知问题。
    • 这样行为保持不变
    【解决方案3】:

    如果您处于“XtraGrid 显示红色 X”状态,有没有简单的方法 XtraGrid 可以再次开始工作

    是的,如果您从一开始就没有进入错误状态。否则通过关闭/重新打开来解决它。

    您链接到的文章包含有关导致 "Red Cross of Death" 出现的原因的信息,或者在绘制期间发生未处理的异常,您处理控件的 CustomDraw 事件并且发生异常或正在异步调用方法。

    如果您难以确定问题的原因,请尝试在示例项目中重新创建问题并将其发送给 DevExpress 支持团队。

    【讨论】:

    • 不好的是,未处理的异常可能在 XtraGrid 本身的某个地方很深。因此,它不是如何让它恢复生活的答案。如果您阅读有关 XtraGrids 的内容,即使 DataSource 中的数据发生更改也可能导致 RedX。因此,仅解决已知问题无济于事,它是关于如何处理错误。如果您查看 DevExpress 网站上的答案,我经常会觉得即使许多人抱怨 DevExpress 的问题也没有问题(例如,不是动画 gif - 解决方法,DatagridSource 无法更改 - 不要更改 DataGrid Source 等。页)
    • 为什么投反对票?如果您难以确定问题的原因,请创建一个基本的 repro 并将其发送到 DevExpress。
    • @kenroger 来自我,这不是一个答案。在开发期间抛出并已知错误的情况下,可以修复导致错误的状态。这不是问的。如果网格不是那么稳定,则可能会出现意外错误。因此,问题是关于错误已经出现时的状态。客户不应该被自发的红色交叉元素所困扰,这些元素只会被一些巫毒教消失。因此,寻找一种方法来检测/从意外错误状态中恢复。像“如果“错误”则记录“错误”撤消“最后操作”这样的模式。并且没有一个可以解决已知问题。
    • @JeremyThompson 可以修复已知错误。问题是用于检测/修复错误状态下的问题。因此,答案错过了问题的主题。问题仅出于以下目的:如果发生了意外事件(并且开发过程中的已知问题并非意外,但可以修复),可以采取哪些措施从红十字会中恢复这件事。这是问题,你还没有回答。
    【解决方案4】:

    在显示参考对话框时,有时与 Visusa Studio 扩展 CodeRush(也由 devExpress 提供)有同样的问题。所以这似乎是一个内部问题。希望下一个版本的 devexpress 能解决这个问题。

    【讨论】:

      猜你喜欢
      • 2017-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多