私は VB.Net バージョンを持っていませんが、うまくいけば、この簡単な C# スニペットがあなたを助けたり、正しい方向に向けたりするでしょう。
この例では、2 つの列を持つ単純な DataGridView を設定します。1 つ目は、"Text" または "Combo" の 2 つの選択肢が設定された DataGridViewComboBox です。
2 番目の列は、最初はデザイナーから DataGridViewTextBoxColumn に設定されています。
DataGridView で CurrentCellDirtyStateChanged イベントを処理します。セルが汚れているかどうかを確認し、最初の列 (ComboBox) のみを確認します。コンボで新しい値を取得するには、CommitEdit を呼び出す必要があります。そうしないと、前の値が表示されます。コンボ ボックスでの選択に基づいて、2 列目のセルをそのタイプの新しいセルで上書きします。
独自のロジックを追加します (ドロップダウンに入力して値を処理します)。値を保存してから、セルなどに戻したい場合があります。
これが私が使用し、簡単で汚いテストを行ったコードです。
private void dataGridView1_CurrentCellDirtyStateChanged(object sender, EventArgs e)
{
if (dataGridView1.IsCurrentCellDirty == false)
{
return;
}
dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit);
if (dataGridView1.CurrentCell.ColumnIndex == 0)
{
if (((string)dataGridView1.CurrentCell.Value) == "Text")
{
dataGridView1.Rows[dataGridView1.CurrentCell.RowIndex].Cells[1] = new DataGridViewTextBoxCell();
}
else if (((string)dataGridView1.CurrentCell.Value) == "Combo")
{
dataGridView1.Rows[dataGridView1.CurrentCell.RowIndex].Cells[1] = new DataGridViewComboBoxCell();
}
}
}
これは、私がテストして動作する簡単な VB 翻訳です。
Public Class Form1
Private Sub DataGridView1_CurrentCellDirtyStateChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DataGridView1.CurrentCellDirtyStateChanged
If DataGridView1.IsCurrentCellDirty = False Then
Return
End If
DataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit)
If DataGridView1.CurrentCell.ColumnIndex = 0 Then
If CStr(DataGridView1.CurrentCell.Value) = "Text" Then
DataGridView1.Rows(DataGridView1.CurrentCell.RowIndex).Cells(1) = New DataGridViewTextBoxCell
ElseIf CStr(DataGridView1.CurrentCell.Value) = "Combo" Then
DataGridView1.Rows(DataGridView1.CurrentCell.RowIndex).Cells(1) = New DataGridViewComboBoxCell
End If
End If
End Sub
クラス終了
その列に保存されている値は失われるため、最初に保存する必要があります。
ジョン