Top > プログラミング > .NET Tips> DataGridViewのコンボボックスにユーザーが文字列を入力できるようにする

DataGridViewのコンボボックスにユーザーが文字列を入力できるようにする」への評価、コメント

評価

良い / 悪い = 9 / 8 (「良い」の割合 = 0.529 , 人気度 = 0.651

評価する

コメント一覧


通常のコメント
MIT 2014/07/8 (Tue) 01:10:58
>>末尾の行を編集後、Enterを押した場合、CellValidatingが実行されず動作しないようです。
>何か良い方法はないのでしょうか。。

http://dobon.net/vb/dotnet/datagridview/textboxevent.html
こちらの方法で(適宜DataGridViewComboBoxEditingControlに置き換えて)キーイベントを捕捉し、
dataGridViewTextBox_KeyPressの中で

private void dataGridViewTextBox_KeyPress(object sender, KeyPressEventArgs e)
{
DataGridViewComboBoxEditingControl cb = (DataGridViewComboBoxEditingControl)sender;
if (dataGridView1.CurrentCell.OwningColumn.Name == "ComboBox" &&
dataGridView1.CurrentCell.OwningColumn is DataGridViewComboBoxColumn)
{
cb.DroppedDown = false;
}
}

としてドロップダウンリストを消すことでうまくいきました。

通常のコメント
okumura 2012/06/11 (Mon) 16:48:03
>末尾の行を編集後、Enterを押した場合、CellValidatingが実行されず動作しないようです。

何か良い方法はないのでしょうか。。

通常のコメント
kunkun 2012/05/13 (Sun) 16:35:33
>リストにない文字列を打ちEnterを押下すると
>なぜかe.FormattedValueには""(空文字)が入ってきてし
>まいます

DroppedDown = Flase

にすれば上手くいくと思います。

通常のコメント
匿名 2012/02/28 (Tue) 15:30:47
末尾の行を編集後、Enterを押した場合、CellValidatingが実行されず動作しないようです。

通常のコメント
SC 2011/02/24 (Thu) 16:29:10
いつも参考にさせて頂いています。

こちらのソースを実装し色々テストしてみたのですが、1点どうしてもできない操作がありました。
コンボボックスセルにフォーカスがあたった状態で「Alt」+「↓」キーでリストを表示し、
その状態でリストにない文字列を打ちEnterを押下すると
なぜかe.FormattedValueには""(空文字)が入ってきてしまいます。

どうにもできないのでしょうか・・・。

評価の理由
Asad Malik 2009/04/20 (Mon) 18:57:07
評価:良い
Thankyou, for helping me out... :)

cheers.

通常のコメント
はち 2009/02/28 (Sat) 18:25:38
こんにちわ。
ここを参考にセル単位に改造してでやってみようとしたのですがなかなかうまくいかず苦労しました・・・
で、最終的に英文のサイトで見つけた手法を使って無事
解決したので後学の為書いておきます。(あと忘れた頃の自分の為に(^_^; )
private: void DataGridView_CellValidating(System::Object^ sender, DataGridViewCellValidatingEventArgs^ e)
{
DataGridView^ dgv = (DataGridView^)sender;

if ( dgv->CurrentCell->GetType() == DataGridViewComboBoxCell::typeid )
{
DataGridViewComboBoxCell^ cell = (DataGridViewComboBoxCell^)dgv->CurrentCell;

System::Object^ eFV = e->FormattedValue;
if ( !cell->Items->Contains(eFV) )
{
cell->Items->Insert( 0, eFV );
if ( dgv->IsCurrentCellDirty )
{
// メモ
// どうもセル単位でやるときは、CommitEditが重要みたい。
// http://www.dotnetmonster.com/Uwe/Forum.aspx/winform/18917/Need-to-create-new-row-in-DataGridView
// 情報源は↑ここ。
dgv->CommitEdit( DataGridViewDataErrorContexts::Commit );//これがミソかも
cell->Value = cell->Items[0];
}
}
}
}
あ、c++/cli なので適当に読み替えてください(^と->とタイプの比較を除けば殆ど一緒。)

評価の理由
うまく反映されません 2009/02/1 (Sun) 18:33:17
評価:悪い
編集できるようになりましたが、
enterで確定すると元に戻るけーすがあります。
行ヘッダの▲が鉛筆(編集モード)にならないときは
反映されません。
行ヘッダの▲が鉛筆(編集モード)になったときは
反映されます。

コメントの投稿

[説明]