[C#]DataGridViewで編集可能なCheckBoxのセルにフォーカスがあるとチェックの状態が正しく描画されません。


以下の表の場合に出席欄(CheckBox)にフォーカスがあるとコード上からtrue/falseを設定してもすぐに画面に反映されません。
フォーカスを漢字氏名欄に移すと反映されます。

|*出席|*漢字氏名|
|□|清水佐紀|

・DataGridView.SelectionMode = FullRowSelect
・出席列.ReadOnly = false
・漢字氏名列.ReadOnly = true

出席列を編集不可にするとコード上からのtrue/falseの設定が画面にすぐ反映されます。
何か解決策はないでしょうか?

http://d.hatena.ne.jp/afternoontea/20060817

回答の条件
  • URL必須
  • 1人5回まで
  • 登録:2006/08/18 02:29:35
  • 終了:2006/08/25 01:42:12

回答(3件)

id:freemann No.1

freemann回答回数322ベストアンサー獲得回数522006/08/18 17:35:54

DataGridViewはVS2005からだったとおもうので手元にないのですが、

Refreshメソッドを使ってはどうですか?

System.Windows.Forms.Controlクラスには定義されてるので、あるとおもうのですが。

http://q.hatena.ne.jp/1155835771

id:afternoontea

残念ながらRefresh()は効果がありません。

DataGridのときはそれでうまくいったはずなのですが。

private void contextMenuAttendanceMenuCheck_Click(object sender, EventArgs e)
{
    Control rightClickOn = contextMenuAttendance.SourceControl;

    if (rightClickOn == berryzDataGridView)
    {
        foreach (DataGridViewRow selectedRow in berryzDataGridView.SelectedRows)
        {
            selectedRow.Cells[berryzAttendanceColumn.Name].Value = true;
        }

        berryzDataGridView.Refresh();
    }
    else if (rightClickOn == cuteDataGridView)
    {
        foreach (DataGridViewRow selectedRow in cuteDataGridView.SelectedRows)
        {
            selectedRow.Cells[cuteAttendanceColumn.Name].Value = true;
        }
    }
}
2006/08/19 12:26:28
id:freemann No.2

freemann回答回数322ベストアンサー獲得回数522006/08/19 14:06:06

checkboxからフォーカスが移ると正常に表示されるのであれば、DataGridViewにTabを送ってフォーカスを強制的に移動させてはどうですか?

http://q.hatena.ne.jp/1155835771

id:freemann No.3

freemann回答回数322ベストアンサー獲得回数522006/08/24 03:36:23

ポイント100pt

色々調べてみたのですが、DataGrid系統には、グリッド内のデータをコードで変えるときにBeginEdit()とEndEditで囲むようです。

なので、上記のソースで

foreach (DataGridViewRow selectedRow in berryzDataGridView.SelectedRows)

{

selectedRow.Cells[berryzAttendanceColumn.Name].Value = true;

}

foreach (DataGridViewRow selectedRow in berryzDataGridView.SelectedRows)

{

berryzDataGridView.BeginEdit("現在カラム","現在行");

selectedRow.Cells[berryzAttendanceColumn.Name].Value = true;

berryzDataGridView.EndEdit("現在カラム","現在行",true);

}

ダミー

http://q.hatena.ne.jp/1155835771

id:afternoontea

http://msdn2.microsoft.com/ja-jp/library/system.windows.form...

DataGridView#BeginEdit(bool selectAll)でうまくできました。

foreach (DataGridViewRow selectedRow in berryzDataGridView.SelectedRows)
{
    berryzDataGridView.BeginEdit(false);
    selectedRow.Cells[berryzAttendanceColumn.Name].Value = true;
    berryzDataGridView.EndEdit();
}

http://msdn2.microsoft.com/ja-JP/library/system.windows.form...

それから、DataGridView#CellBeginEdit(),CellEndEdit()で確認してみましたが、フォーカスがあたると編集状態になるようです。

ありがとうございました。

2006/08/25 01:35:11

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません