Popolare colonna comboBox in DataGridView

venerdì 03 novembre 2017 - 00.26
Tag Elenco Tags  VB.NET  |  Windows 7  |  Visual Studio 2010  |  SQL Server 2008 R2  |  Office 2010

Peppino Profilo | Junior Member

Buonasera anzi visto l'ora buonanotte a tutti.
Uso SqlExpress 2008 R2 e Visual Basic 2010 Express
Sono 2 giorni che ho letto articoli sull'argomento. Conclusione, ho solo accumulato tanta confusione e un mal di testa.
Ho un piccolo problema, sicuramente per voi lo è, per me è un po diverso. Con il codice che posto in seguito, ho una form con una datagridview abilitata a
Insert, Update e delete. Su questa tabella avrei bisogno di inserire delle colonne combinate. Riesco a popolare la datagridview e forse penso di essere riuscito anche a inserire le colonne combinate. Il problema è: 1° che non riesco a popolare queste colonne, 2° non riesco a visualizzare su queste colonne il valore esistente e 3° dovrei salvare la selezione effettuata di questa colonna. Posto il codice e magari mi indirizzate sul link giusto in cui continuare a sbattere la testa e magari risolvere il problema. Se poi vorreste essere cosi tanto gentili, più del dovuto e risparmiandomi un'altro mal di testa, e voler correggere quest codice, beh non mi stancherei nel ringraziarvi. Comunque spero di essere stato chiaro nell'esporre il problema, e ringrazio anticipatamentel'eventuale risposta.
Il codice.
Private Sub BtnConferma_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnConferma.Click

Me.Bds.Filter = Nothing

If Not DatiValidi() Then Exit Sub

' Apre il DataGridView per il BindingSource
' e l'apertura dei dati del database in base alle condizioni seguenti.
Me.Bds.Filter = "Condominio LIKE '%" + CmbCondominio.Text + "%' and Gestione LIKE '%" + CmbGestione.Text + "%' " Try

Me.DgvGiornale.DataSource = Me.Bds
GetData("Select * from Giornale_dettaglio")

Catch ex As Exception
MsgBox(ex.Message.ToString, MsgBoxStyle.Critical)
End Try
End Sub

Private Sub GetData(ByVal selectCommand As String)

Try
' Crea un nuovo data adapter specificato nella query.
Me.dataAdapter = New SqlDataAdapter(selectCommand, ConnessioneDatabase)

' Crea un command builder per generare su SQL aggiorna, inserisci, e
' cancella comandi vengono eseguiti su elementi selezione. Queste modifiche
' vengono effettuati sul database.
Dim commandBuilder As New SqlCommandBuilder(Me.dataAdapter)

' Populate a new data table and bind it to the BindingSource.
Dim table As New DataTable()
table.Locale = System.Globalization.CultureInfo.InvariantCulture
Me.dataAdapter.Fill(table)
Me.Bds.DataSource = table

' Inserisco una colonna ComboBox nel DataGridView.
Dim colonnaCombo As New DataGridViewComboBoxColumn()

DgvGiornale.Columns.Remove("Gestione")
DgvGiornale.Columns.Insert(1, colonnaCombo)
colonnaCombo.HeaderText = "Gestione"
colonnaCombo.Name = "Gestione"


' Qui si ferma l'asino.


' Visualizza la griglia in base alla formattazione voluta e non in automatico.
FillDataGridView()

Catch ex As SqlException
MessageBox.Show("Griglia visualizzazione dati. ")
End Try

End Sub

Buonanotte a tutti. Peppino.

Buongiorno a tutti.
Credo di aver risolto il problema, almeno questo.
Ho trovato un esempio che avevo già provato adattato alle mie esigenze, ma mi dava errore, poi analizzandolo meglio ho trovato e corretto l'errore e lo riporto di seguito.

Private Sub BtnConferma_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnConferma.Click

Me.Bds.Filter = Nothing

If Not DatiValidi() Then Exit Sub

' Apre il DataGridView per il BindingSource
' e l'apertura dei dati del database in base alle condizioni seguenti.
Me.Bds.Filter = "Condominio LIKE '%" + CmbCondominio.Text + "%' and Gestione LIKE '%" + CmbGestione.Text + "%' " Try

Me.DgvGiornale.DataSource = Me.Bds
GetData("Select * from Giornale_dettaglio")

AggiungiColonnaComboBox()

Catch ex As Exception
MsgBox(ex.Message.ToString, MsgBoxStyle.Critical)
End Try
End Sub

Private Sub AggiungiColonnaComboBox()
Dim colonnaCombo As DataGridViewComboBoxColumn

DgvGiornale.Columns.Remove("Conto")

colonnaCombo = CreaColonnaComboBox()
SelezionaUsandoDatiDiUnaTabella(colonnaCombo)
colonnaCombo.HeaderText = "Conto"

DgvGiornale.Columns.Insert(4, colonnaCombo)

End Sub

Private Function CreaColonnaComboBox() As DataGridViewComboBoxColumn

Dim column As New DataGridViewComboBoxColumn()

With column
.DataPropertyName = "Conto"
.HeaderText = "Conto"
.DropDownWidth = 170
.Width = 170
.MaxDropDownItems = 3
.FlatStyle = FlatStyle.Flat
.DefaultCellStyle.BackColor = Color.Khaki
' .DefaultCellStyle.SelectionBackColor = Color.DarkRed
' .DefaultCellStyle.SelectionForeColor = Color.Yellow
End With

Return column

End Function

Private Sub SelezionaUsandoDatiDiUnaTabella(ByVal comboboxColumn As DataGridViewComboBoxColumn)

With comboboxColumn
.DataSource = RiportaDatiTabella()
.ValueMember = "Conto"
.DisplayMember = .ValueMember
End With

End Sub

Private Function RiportaDatiTabella() As DataTable

Return PopolaColonnaComboBox("SELECT distinct Conto FROM Conti")

End Function

Private Function PopolaColonnaComboBox(ByVal sqlCommand As String) As DataTable

Dim command As New SqlCommand(sqlCommand, ConnessioneDatabase)

Dim adapter As New SqlDataAdapter()
adapter.SelectCommand = command
Dim table As New DataTable()
table.Locale = System.Globalization.CultureInfo.InvariantCulture
adapter.Fill(table)

Return table
End Function

Può darsi che c'è da aggiustare ancora qualcosa, ma per il momento va bene cosi.
Adesso invece il problema (e non sono riuscito a trovare niente a riguardo) è che ho bisogno di inserire più colonne combobox e non so come fare.
Per dire una delle tante, potrei ripetere il codice per ogni colonna da aggiungere. Ma questo è come contare da uno a cinque con i sassolini.
Sicuramente c'è un metodo per fare tutto questo. Quindi se gentilmente potresti dirmi come fare, oppure indicarmi dove poter trovare qualcosa che mi aiuta
a risolvere il mio problema.
Ringrazio ancora anticipatamente. Ciao a tutti. Peppino
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5