Frans_Truyens
asked on
Datagridview with a dropdown
I have a datagridview, and all the cells are textboxes. I would like to change one of the textboxes to a dropdown. How do I do that?
Dim adp As OleDb.OleDbDataAdapter
Dim stTeksten As DataSet
Private Sub Teksten_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim strSQL As String
strSQL = "SELECT ID, Taal, Nummer, Tekst FROM Tekst ORDER BY Nummer, Taal;"
adp = New OleDb.OleDbDataAdapter(strSQL, GetConnection)
stTeksten = New DataSet
adp.Fill(stTeksten, "Teksten")
Me.gridTeksten.DataSource = stTeksten.Tables("Teksten")
Me.gridTeksten.Columns("ID").Visible = False
'gridteksten.Columns(2).
End Sub
Private Sub SaveGrid_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdSave.Click
Dim cmdbuilder As New OleDb.OleDbCommandBuilder(adp)
Dim i As Integer
Try
i = adp.Update(stTeksten, "Teksten")
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
You can't do exactly what you're asking for. Even if the data wasn't bound, I don't think you can have one combobox in a textbox column. What you could do is add a new DataGridViewComboBoxColumn bound to that table/field, but in that way, all the items in that column would be dropdowns.
ASKER
I mean, i have three columns. Two of them have to stay textboxes, and the third one has to be a dropdown. So all the items in the third column will be dropdowns.
Could you give me a code example? I am trying it, but i got to here:
Dim strSQL As String
If gTaal = "FR" Then
strSQL = "SELECT ID, Taal AS Langue, Nummer AS Numéro, Tekst AS Texte FROM Tekst ORDER BY Nummer, Taal;"
Else
strSQL = "SELECT ID, Taal, Nummer, Tekst FROM Tekst ORDER BY Nummer, Taal;"
End If
adp = New OleDb.OleDbDataAdapter(str SQL, GetConnection)
stTeksten = New DataSet
adp.Fill(stTeksten, "Teksten")
Me.gridTeksten.DataSource = stTeksten.Tables("Teksten" )
Me.gridTeksten.Columns("ID ").Visible = False
Dim colTest As New DataGridViewComboBoxColumn 'DataGridViewColumn
colTest.ValueMember = "Taal"
colTest.Items.Add("NL")
colTest.Items.Add("FR")
Me.gridTeksten.Columns.Add (colTest)
Could you give me a code example? I am trying it, but i got to here:
Dim strSQL As String
If gTaal = "FR" Then
strSQL = "SELECT ID, Taal AS Langue, Nummer AS Numéro, Tekst AS Texte FROM Tekst ORDER BY Nummer, Taal;"
Else
strSQL = "SELECT ID, Taal, Nummer, Tekst FROM Tekst ORDER BY Nummer, Taal;"
End If
adp = New OleDb.OleDbDataAdapter(str
stTeksten = New DataSet
adp.Fill(stTeksten, "Teksten")
Me.gridTeksten.DataSource = stTeksten.Tables("Teksten"
Me.gridTeksten.Columns("ID
Dim colTest As New DataGridViewComboBoxColumn
colTest.ValueMember = "Taal"
colTest.Items.Add("NL")
colTest.Items.Add("FR")
Me.gridTeksten.Columns.Add
This should work...
Dim colTest As New DataGridViewComboBoxColumn 'DataGridViewColumn
colTest.DataPropertyName = "Taal"
colTest.ValueMember = "Taal"
colTest.DisplayMember = "Taal"
Me.gridTeksten.Columns.Add (colTest)
Dim colTest As New DataGridViewComboBoxColumn
colTest.DataPropertyName = "Taal"
colTest.ValueMember = "Taal"
colTest.DisplayMember = "Taal"
Me.gridTeksten.Columns.Add
ASKER
Thanks. I played a little bit with the code. But it still does not work. It shows the column 'Taal' two times. Once because it is in the dataset, and once because I add it.
I want ONLY to see the Language combo ONCE. How do I do that? You can modify the code below.
I want ONLY to see the Language combo ONCE. How do I do that? You can modify the code below.
Dim strSQL As String
If gTaal = "FR" Then
strSQL = "SELECT ID, Taal AS Langue, Nummer AS Numéro, Tekst AS Texte FROM Tekst ORDER BY Nummer, Taal;"
Else
strSQL = "SELECT ID, Taal, Nummer, Tekst FROM Tekst ORDER BY Nummer, Taal;"
End If
adp = New OleDb.OleDbDataAdapter(strSQL, GetConnection)
stTeksten = New DataSet
adp.Fill(stTeksten, "Teksten")
Me.gridTeksten.DataSource = stTeksten.Tables("Teksten")
Dim colTest1 As New DataGridViewComboBoxColumn
colTest1.DataPropertyName = "Taal"
colTest1.ValueMember = "Taal"
colTest1.DisplayMember = "Taal"
colTest1.HeaderText = "Taal"
colTest1.Items.Add("NL")
colTest1.Items.Add("FR")
Me.gridTeksten.Columns.Add(colTest1)
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
I'm sorry, ignore what I just wrote....this is what you want:
Dim strSQL As String
If gTaal = "FR" Then
strSQL = "SELECT ID, Taal AS Langue, Nummer AS Numéro, Tekst AS Texte FROM Tekst ORDER BY Nummer, Taal;"
Else
strSQL = "SELECT ID, Taal, Nummer, Tekst FROM Tekst ORDER BY Nummer, Taal;"
End If
adp = New OleDb.OleDbDataAdapter(strSQL, GetConnection)
stTeksten = New DataSet
adp.Fill(stTeksten, "Teksten")
Me.gridTeksten.DataSource = stTeksten.Tables("Teksten")
DataGridView1.Columns.Remove("Taal")
Dim colTest1 As New DataGridViewComboBoxColumn
colTest1.Items.Add("NL")
colTest1.Items.Add("FR")
colTest1.DataPropertyName = "Taal"
colTest1.Name = "Taal"
Me.gridTeksten.Columns.Add(colTest1)
ASKER
Thanks a lot.