DataGridViewのエラー?

タグの編集
投稿者 YUU  (社会人) 投稿日時 2015/6/25 22:07:36
現在リリース中のアプリにてエラーが発生し、調べても同様の現象を見つけることができません。

DataGridVeiwコントロールに赤い×印が大きく表示されているものです。

コード内の処理で行っているものではなく原因がつかめません。(スクショでのみ確認。)

再度アプリケーション起動後問題なしとのことでしたが続くようであれば対策を考えなくてはならないのですが現状不明です。

今回2度目とのこともあって質問させていただきます。

頻度は月1、毎日利用されているアプリですが処理時間は短いかと。グリッドの描画時エラーなのか?

某知恵袋に類似の現象と見受けられるものがありましたがそれ以外見つかりませんでした。
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2015/6/25 22:50:53
赤バツは、レンダリングエラー時に表示されることがあります。
(レンダリングされていないだけならば、単に白くなるか、残像が残るだけですが)

一例としては、DoEvents によるイベント再入などにより、セルの描画中に
バインドデータが変更された場合などでしょうか。

単純な再現実験としてはこんなのとか。

Public Class Form1
    Private tbl1, tbl2 As DataTable
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        tbl1 = New DataTable()
        tbl1.Columns.Add("F1")
        tbl1.Columns.Add("F2")
        For n = 1 To 1000
            tbl1.Rows.Add(CStr(n), StrDup(n, "@"))
        Next

        tbl2 = New DataTable()
        tbl2.Columns.Add("F1")
        tbl2.Columns.Add("F2")
        For n = 1 To 1000
            tbl2.Rows.Add(CStr(n), StrDup(n, "="))
        Next

        Me.DataGridView1.DataSource = tbl1
    End Sub

    Private Sub DataGridView1_CellPainting(sender As Object, e As DataGridViewCellPaintingEventArgs) Handles DataGridView1.CellPainting
        If e.RowIndex < 500 Then
            Me.DataGridView1.DataSource = tbl1
        Else
            Me.DataGridView1.DataSource = tbl2
        End If
    End Sub
End Class
投稿者 YUU  (社会人) 投稿日時 2015/6/30 22:15:54
返信遅れてすみません。返答ありがとうございました。

この一週間再現しませんでした。

しかし、ご助言通りバインド時に不要なイベントが生じコントロールがおかしくなるのが原因ではないかと思っております。

如何せん再現性が低いのでもう少し様子見もかねてイベントの制御を視野に考察してみます。