Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
Popolare colonna comboBox in DataGridView
venerdì 03 novembre 2017 - 00.26
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Elenco Tags
VB.NET
|
Windows 7
|
Visual Studio 2010
|
SQL Server 2008 R2
|
Office 2010
Peppino
Profilo
| Junior Member
193
messaggi | Data Invio:
ven 3 nov 2017 - 00:26
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
Torna su
Stanze Forum
Elenco Threads
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 !