3

DataGridViewを使用するのはこれが初めてで、少し圧倒されます(非常に多くのオプションがあります!)。

プロパティのリストを1行に1つずつ表示したいと思います。各行は名前と値のペアです。プロパティの名前は固定されていますが、ユーザーは任意の値を自由に入力できます。

さて、各プロパティにはすでに使用されている値のリストがあるので、ドロップダウンリストでそれらをユーザーが利用できるようにしたいと思います。ただし、ユーザーが新しい値を入力できるようにすることも必要です。理想的には、ユーザーが入力すると値がオートコンプリートされる必要があります。

DataGridViewComboBoxColumnスタイルの列を使用してみましたが、標準のコンボボックスはタイプまたは編集の作業方法をサポートしているため、これでうまくいくと思います。ただし、リストからの選択しか許可されていないようです(さらに、キーを押すと、リストから最初に一致するエントリが自動的に選択されます)。新しい値を入力する方法はないようです。

844のプロパティのどれを設定する必要がありますか?:-)

4

1 に答える 1

1

コンボボックスのDropDownStyleを変更して、コンボボックスが編集モードのときにユーザーがテキストを入力できるようにする必要がありますが、標準のDataGridViewではデザイン時にこの動作が許可されないため、いくつかのトリックを引き出し、CellValidating、EditingControlShowing、CellValidatedを処理する必要があります。イベント。

これがコードです(MSDNフォーラムから、それは私のために働きます)。

         private Object newCellValue;
         private void dataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
         {
             if (dataGridView1.CurrentCell.IsInEditMode)
             {
                 if (dataGridView1.CurrentCell.GetType() ==
                 typeof(DataGridViewComboBoxCell))
                 {
                     DataGridViewComboBoxCell cell =
                     (DataGridViewComboBoxCell)dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex];

                     if (!cell.Items.Contains(e.FormattedValue))
                     {
                         cell.Items.Add(e.FormattedValue);

                         cell.Value = e.FormattedValue;

                         //keep the new value in the member variable newCellValue
                         newCellValue = e.FormattedValue;
                     }
                 }
             }
         }

         private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
         {
             if (e.Control.GetType() ==
typeof(DataGridViewComboBoxEditingControl))
             {
                 ((ComboBox)e.Control).DropDownStyle = ComboBoxStyle.DropDown;
             }
         }

         private void dataGridView1_CellValidated(object sender, DataGridViewCellEventArgs e)
         {
             if (dataGridView1.CurrentCell.GetType() ==
                 typeof(DataGridViewComboBoxCell))
             {
                 DataGridViewCell cell =
                 dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex];
                 cell.Value = newCellValue;
             }
         }
于 2012-11-06T17:15:34.070 に答える