プロが教えるわが家の防犯対策術!

DataGridView内にコンボボックスのカラムを設定しました。
下記のサイトを参考にしました。

http://dobon.net/vb/dotnet/datagridview/combobox …

入力した内容をカラム単位ではなく、セル単位で追加したかったため、
CellValidatingメソッドを下記の通り一部変更しました。

//CellValidatingイベントハンドラ
private void DataGridView_CellValidating(object sender,
DataGridViewCellValidatingEventArgs e)
{
DataGridView dgv = (DataGridView)sender;
//該当する列か調べる
if (dgv.Columns[e.ColumnIndex].Name == "sComboColumn" &&
dgv.Columns[e.ColumnIndex] is DataGridViewComboBoxColumn)
{
//DataGridViewComboBoxColumn cbc =
// (DataGridViewComboBoxColumn)dgv.Columns[e.ColumnIndex];
//
// ↓cellへ変更
//
DataGridViewComboBoxCell cbc =
(DataGridViewComboBoxCell)dgv.Rows[e.RowIndex].Cells[e.ColumnIndex];
//コンボボックスの項目に追加する
if (!cbc.Items.Contains(e.FormattedValue))
{
cbc.Items.Add(e.FormattedValue);
}
//セルの値を設定しないと、元に戻ってしまう
dgv[e.ColumnIndex, e.RowIndex].Value = e.FormattedValue;
}
}

コンボボックスに入力し、EnterやTabを押したタイミングでコンボボックスのリストに、
入力した文字列が追加されます。また、入力した文字列がセルに表示された状態になります。
しかし、その後同じセルに文字列を入力した場合、リストに文字列が追加されますが、
セルに表示される文字列はその前に入力された文字列のままです。

どのようにすれば入力後のセルの内容を設定できるかご存じの方がいれば
ご教授いただきたいです。

A 回答 (1件)

お示しのURLのコメントにあるように ComboBoxにアイテムを追加したので DataGridViewのセルステータスが変更されてしまっているのが原因のようですよ



//コンボボックスの項目に追加する
if (!cbc.Items.Contains(e.FormattedValue))
{
  cbc.Items.Add(e.FormattedValue);
  // ここでDataGridViewのIsCurrentCellDirtyがTrueになってしまうのでFalseにするために
  dgv.CommitEdit(DataGridViewDataErrorContexts.Commit);
}
といった具合の処理が必要です

これはDataGridViewComboBoxColumnの場合でも一緒です
    • good
    • 0
この回答へのお礼

ありがとうございます!
ちゃんと見ておらずお恥ずかしいばかりです・・・

どうもありがとうございました!

お礼日時:2012/01/30 23:02

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています