Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it L'avatar di Vinsent
    Registrato dal
    May 2011
    Messaggi
    314

    [VB.NET] DGV e combobox

    Il mio obiettivo è:
    caricare un DataGridView da un DataSet e impostare le celle di una colonna come ComboBox con i valori delle celle della colonna corrispondente del DataSet.
    Nella mia ignoranza , con il codice sotto(una form con un DataGridView), sono riuscito a raggiungere il mio obiettivo ma ho dovuto aggiungere una copia(ds_copia) del DataSet originale(ds) per ottenere i dati della colonna. Altrimenti, usando il DataSet originale, la "cella ComboBox" contiene tutti i dati della colonna ma non riesco a modificare il valore in base alla sua selezione.
    Intuisco che la copia del DataSet iniziale non sia una buona idea....consigli?

    codice:
    Public Class Form1
        Dim ds As New DataSet
        Dim ds_copia As New DataSet
    
        Private Sub Form1_Load() Handles MyBase.Load
    
            ds.DataSetName = "prova"
            ds.Tables.Add("colonne")
            ds.Tables("colonne").Columns.Add("nome")
            ds.Tables("colonne").Columns.Add("testo")
    
            Dim riga(1) As String
            For a = 1 To 3
                riga(0) = "nome" & a
                riga(1) = "testo" & a
                ds.Tables("colonne").Rows.Add(riga)
            Next
    
            ds_copia = ds.Copy
    
            Dim colonna_nome As New DataGridViewComboBoxColumn
            colonna_nome.DataSource = ds_copia.Tables("colonne")
            colonna_nome.DisplayMember = "nome"
            colonna_nome.HeaderText = "nome"
    
            Dim colonna_testo As New DataGridViewTextBoxColumn
            colonna_testo.HeaderText = "testo"
    
            DataGridView1.Columns.Add(colonna_nome)
            DataGridView1.Columns.Add(colonna_testo)
            DataGridView1.AutoGenerateColumns = False
            DataGridView1.DataSource = ds.Tables("colonne")
    
            DataGridView1.Columns(0).DataPropertyName = "nome"
            DataGridView1.Columns(1).DataPropertyName = "testo"
    
        End Sub
    
    End Class

  2. #2
    Utente di HTML.it L'avatar di Vinsent
    Registrato dal
    May 2011
    Messaggi
    314
    Penso di aver risolto il mio dubbio...nel codice, di esempio, sotto:
    con "button1" ottengo i valori della colonna e li aggiungo alla combo senza duplicati, utile se non conosco i dati a prescindere...
    con "button2", aggiungo i valori che voglio "io" alla combo, se nel dataset non corrispondono l' errore viene gestito da "errore_DataGridView1" che è solo un' abbozzo da rifinire...
    Ogni critica o suggerimento e ben accetta:

    codice:
    Public Class Form1
        Dim ds As New DataSet
    
        Private Sub Form1_Load() Handles MyBase.Load
            'creo il dataset
            ds.DataSetName = "prova"
            ds.Tables.Add("colonne")
            ds.Tables("colonne").Columns.Add("nome")
            ds.Tables("colonne").Columns.Add("testo")
            'riempo "al volo" il dataset con valori duplicati
            Dim riga(1) As String
            For a = 0 To 1
                For b = 1 To 3
                    riga(0) = "nome" & b
                    riga(1) = "testo" & b
                    ds.Tables("colonne").Rows.Add(riga)
                Next
            Next
        End Sub
    
        'se non conosco i dati
        Private Sub Button1_Click() Handles Button1.Click
    
            Dim colonna_nome As New DataGridViewComboBoxColumn
            colonna_nome.HeaderText = "nome"
    
            'aggiungo i valori senza duplicati
            For Each row As DataRow In ds.Tables("colonne").Rows
                If Not colonna_nome.Items.Contains(row.Item("nome").ToString) Then
                    colonna_nome.Items.Add(row.Item("nome").ToString)
                End If
            Next
    
            Dim colonna_testo As New DataGridViewTextBoxColumn
            colonna_testo.HeaderText = "testo"
    
            DataGridView1.Columns.Add(colonna_nome)
            DataGridView1.Columns.Add(colonna_testo)
            DataGridView1.AutoGenerateColumns = False
            DataGridView1.DataSource = ds.Tables("colonne")
            DataGridView1.Columns(0).DataPropertyName = "nome"
            DataGridView1.Columns(1).DataPropertyName = "testo"
    
        End Sub
    
        'se conosco i dati
        Private Sub Button2_Click() Handles Button2.Click
            Dim colonna_nome As New DataGridViewComboBoxColumn
            colonna_nome.HeaderText = "nome"
    
            'genera l' errore
            colonna_nome.Items.Add("nome1 errore")
    
            colonna_nome.Items.Add("nome2")
            colonna_nome.Items.Add("nome3")
            colonna_nome.Items.Add("nome4")
    
            Dim colonna_testo As New DataGridViewTextBoxColumn
            colonna_testo.HeaderText = "testo"
    
            DataGridView1.Columns.Add(colonna_nome)
            DataGridView1.Columns.Add(colonna_testo)
            DataGridView1.AutoGenerateColumns = False
            DataGridView1.DataSource = ds.Tables("colonne")
            DataGridView1.Columns(0).DataPropertyName = "nome"
            DataGridView1.Columns(1).DataPropertyName = "testo"
        End Sub
    
        'gestisco l' errore
        Private Sub errore_DataGridView1(ByVal sender As Object, ByVal e As DataGridViewDataErrorEventArgs) Handles DataGridView1.DataError
            DataGridView1.Rows(e.RowIndex).ErrorText = "valore non valido"
            DataGridView1.Rows(e.RowIndex).SetValues("")
        End Sub
    
    End Class

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.