2010年3月10日水曜日

[.Net ミニメモ] DataGridViewにBindingSourceをバインドしたときに表示がおかしいとき

DataGridViewにBindingSourceをバインドして、同期して表示や編集をしているときに、列やセルの選択の表示がおかしくなっている場合があります。
そのときには、バインドしているBindingSourceを操作しているスレッドがメインスレッドになっているか確認してみてください。通常のUI部品への操作と違って、例外が発生せずにそのまま走りますが、動きが変になるようです。

具体的には、InvokeRequiredでメインスレッドでないかを確認して、必要であればInvoke()を使ってメインのスレッドで動くようにしてください。ありがちなC#のコードは以下ようなものです。

private void exampleHandler(object sender, EventArg e)
{
    if (InvokeRequired) {
        object[] args = { sender, e };
        Invoke(new EventHandler(exampleHandler), args);
        return;
    }
    // 以下に処理したいコードを書く
}

0 件のコメント: