20

WinForms アプリケーションに 1 つの DataGridViewComboBoxColumn を持つ DataGridView があります。ボタンをクリックした後、この DataGridViewComboBoxColumn を手動でドロップダウン (開く) する必要があります。

これが必要な理由は、SelectionMode を FullRowSelect に設定しており、コンボ ボックスを開くには 2 ~ 3 回クリックする必要があるためです。コンボボックスのセルをクリックしたいのですが、すぐにドロップダウンするはずです。CellClick イベントでこれを行いたいのですが、他に方法はありますか?

Google と VS のヘルプで検索していますが、まだ情報が見つかりません。

誰でも助けてもらえますか?

4

7 に答える 7

24

これが理想的な解決策ではないことはわかっていますが、セル内で機能するシングルクリックのコンボ ボックスが作成されます。

   Private Sub cell_Click(ByVal sender As System.Object, ByVal e As DataGridViewCellEventArgs) Handles DataGridView1.CellClick
        DataGridView1.BeginEdit(True)
        If DataGridView1.Rows(e.RowIndex).Cells(ddl.Name).Selected = True Then
            DirectCast(DataGridView1.EditingControl, DataGridViewComboBoxEditingControl).DroppedDown = True
        End If
    End Sub

ここで、「ddl」は、グリッドビューに追加したコンボボックス セルです。

于 2008-10-27T20:05:37.113 に答える
17

ThisMat に感謝します。あなたのソリューションは完璧に機能します。

C# での私のコード:

private void dataGridViewWeighings_CellClick(object sender, DataGridViewCellEventArgs e) {
    if (e.RowIndex < 0) {
        return;     // Header
    }
    if (e.ColumnIndex != 5) {
        return;     // Filter out other columns
    }

    dataGridViewWeighings.BeginEdit(true);
    ComboBox comboBox = (ComboBox)dataGridViewWeighings.EditingControl;
    comboBox.DroppedDown = true;
}
于 2008-10-28T10:16:27.787 に答える
11

設定することで、あなたが探しているものに近づくことができました

DataGridView1.EditMode = DataGridViewEditMode.EditOnEnter

他のセルのドロップダウンが表示されない限り、選択したセルのドロップダウンがすぐに表示されます。

引き続き考えて、何かあれば更新します。

于 2008-10-27T20:28:09.363 に答える
3

C#版ありがとうございます。コンボ列名による検索への私の貢献は次のとおりです。

private void dgv_CellClick(object sender, DataGridViewCellEventArgs e)
{
    string Weekdays = @"MondayTuesdayWednesdayThursdayFridaySaturdaySunday";
    if (Weekdays.IndexOf(dgv.Columns[e.ColumnIndex].Name) != -1)
    {
        dgv.BeginEdit(true);
        ComboBox comboBox = (ComboBox)dgv.EditingControl;
        comboBox.DroppedDown = true;
    }
}
于 2011-07-19T18:18:00.530 に答える
2

DataGridView のEditModeプロパティをEditOnEnterに設定し、 EditingControlShowingイベント を作成して、このイベントでコンボ ボックスをドロップダウンするコードを追加することで、マウスを 1 回クリックするだけでコンボ ボックスをアクティブにしてドロップダウンすることができました。ここにサンプルコードがあります -

//to get the correct cell get value of row and column indexs of the cell
 ColIndex = 1;
 RowIndex = 1;

 DataGridViewComboBoxCell ComboBoxCell = new DataGridViewComboBoxCell();
 ComboBoxCell.Items.AddRange("XYZ", "ABC", "PQR");
 ComboBoxCell.Value = "XYZ";
 datagridview1[ColIndex, RowIndex] = ComboBoxCell;

上記のコードから、位置 (1,1) の DataGirdCell は「DataGridViewComboBoxCell」に変換され、コンボ ボックスがセルに表示されます。

コンボ ボックスをドロップダウンするには、マウスを複数回クリックする必要がある場合があります。シングルクリックでコンボボックスをアクティブにするには、次の手順が必要です -

  1. コンボ ボックス セルの ReadOnly プロパティを false に設定します。
  2. DataGridView の EditMode プロパティを EditOnEnter に設定します。
  3. EditingControlShowing イベントを作成し、コンボ ボックスをドロップダウンするコードを追加します。

コンボ ボックスをドロップダウンし、シングル クリックでアクティブにするサンプル コードを次に示します。

private void datagridview1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
    {
ComboBox ctrl = e.Control as ComboBox;
ctrl.Enter -= new EventHandler(ctrl_Enter);
ctrl.Enter += new EventHandler(ctrl_Enter);        
}
void ctrl_Enter(object sender, EventArgs e)
{
(sender as ComboBox).DroppedDown = true;
}

詳細については、 http://newapputil.blogspot.in/2015/08/add-combo-box-in-cell-of-datagridview.htmlを確認してください。

于 2015-08-26T10:26:54.200 に答える
2

私もこれに対する答えを探していました。アプリにはたくさんのものがあり、それらすべてが同じように動作するようにしたかったので、任意の DataGridView から呼び出すことができる汎用サブルーチンを作成することになりました。これは私にとってはうまくいったので、この投稿に出くわした他の人と共有したいと思いました.

DGV の MouseClick イベントにコードを追加します。

Private Sub SomeGrid_MouseClick(sender As Object, e As MouseEventArgs) Handles SomeGrid.MouseClick
    DGV_MouseClick(sender, e)
End Sub

共有モジュールに保存する次のサブを呼び出す

Public Sub DGV_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
    Try
        Dim dgv As DataGridView = sender
        Dim h As DataGridView.HitTestInfo = dgv.HitTest(e.X, e.Y)
        If h.RowIndex > -1 AndAlso h.ColumnIndex > -1 AndAlso dgv.Columns(h.ColumnIndex).CellType Is GetType(DataGridViewComboBoxCell) Then
            Dim cell As DataGridViewComboBoxCell = dgv.Rows(h.RowIndex).Cells(h.ColumnIndex)
            If Not dgv.CurrentCell Is cell Then dgv.CurrentCell = cell
            If Not dgv.IsCurrentCellInEditMode Then
                dgv.BeginEdit(True)
                CType(dgv.EditingControl, ComboBox).DroppedDown = True
            End If
        End If
    Catch ex As Exception
    End Try
End Sub

エラーをキャッチしたことはありません。例外をスローする可能性があるとは考えられなかったまれなインスタンスの Try..Catch コードのみを含めます。このシナリオでは、ユーザーがエラー メッセージに悩まされることを望んでいませんでした。サブが失敗した場合、ほとんどの場合、DGV はとにかく通常どおりに動作します。

于 2015-01-06T07:25:56.117 に答える