Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Hybrid View

  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2017
    Messaggi
    23

    [VB.NET] Inizializzare ComboBox con righe di una colonna di DataGridView

    Ciao a tutti,
    avrei bisogno di un vostro aiuto per popolare una combobox con tutte le righe di una specifica colonna di di una datagridview. popolata a mezzo lettura file txt.

    Apro un file txt (leggi) per importare in una datagridview il contenuto del file .txt (con separatore ";") e popolo la combobox con le prime righe della prima colonna.
    Vorrei creare un ciclo in modo da importare in automatico tutte le righe della prima colonna della datagridview (e presenti nel file .txt) ed evitare di indicare manualmente quelle da importare.

    Quindi, inserendo nel file txt una nuova riga, vorrei non dover modificare il codice manualmente ogni volta.

    A seguire il codice che son riuscito a scrivere:

    codice:
     'pulisci la datagridview e crea colonne
                   DGVfraz.Columns.Clear()
                    DGVfraz.Columns.Add("", "Fraz.")
                    DGVfraz.Columns.Add("", "Server")
                    DGVfraz.Columns.Add("", "User")
                    DGVfraz.Columns.Add("", "Pwd")
    'leggi file .txt
                    Dim leggi As New System.IO.StreamReader("c:\test" + ".txt")
                    Dim riga As String
                    Dim parti() As String
          
              While leggi.Peek() <> -1
                        riga = leggi.ReadLine
                        parti = Split(riga, ";")
                        DGVfraz.Rows.Add(parti)
    
                    End While
                    leggi.Close()
    
     'popola la COMBOX
                    ToolCombo1.Items.Clear()
                    ToolCombo1.Items.Add(DGVfraz.Item(0, 0).Value)
                    ToolCombo1.Items.Add(DGVfraz.Item(0, 1).Value)
                    ToolCombo1.Items.Add(DGVfraz.Item(0, 2).Value)

    Sto usando visual studio 2015 - linguaggio VB .net.

    Grazie anticipatamente per l'aiuto.
    Fabio
    Ultima modifica di LeleFT; 12-03-2020 a 09:41 Motivo: Aggiunti i tag CODE

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,153
    Ho spostato la discussione nell'area dedicata ai linguaggi .NET (Visual Basic e .NET Framework).
    Inoltre, quando si posta del codice, si devono usare i tag CODE, automaticamente inseriti dal forum se si clicca il pulsante "#" (l'ultimo della toolbar).

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it L'avatar di patel
    Registrato dal
    Jan 2008
    Messaggi
    1,963
    lo puoi fare con un ciclo FOR
    codice:
    ToolCombo1.Items.Clear()
    For n As Integer = 0 To DGVfraz.Rows.Count - 2
          ToolCombo1.Items.Add(DGVfraz.Item(0, n).Value)
    Next

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2017
    Messaggi
    23
    Ciao a tutti e un GRAZIE a Patel per la soluzione..
    erano giorni che ci giravo intorno.. stavo impazzendo!

    Ho risolo modificato il codice in questo modo in quanto veniva eliminata l'ultima riga:

    codice:
    ToolCombo1.Items.Clear()
    For n As Integer = 0 To DGVfraz.Rows.Count - 1
          ToolCombo1.Items.Add(DGVfraz.Item(0, n).Value)
    Next
    Forse dovrei aprire una nuova discussione per chiedere un'altro piccolo aiuto.


    Con il codice postato leggo un file .txt e lo apro nella DGVfraz.
    Con l'aiuto di Patel, riesco ora popolare la combobox (ToolCombo1) con gli item relativi a tutte le righe della datagridview (DGVfraz) formata da 4 colonne ed n righe.




    Effettuando la scelta di una voce dalla combobox, vorrei popolare le 3 textbox con le rispettive colonne:


    ES: la DGVfraz mostra tale riga:
    ROMA | 11.112.12.11 | Username | PWD


    scegliendo dalla COMBOBOX "ROMA" vorrei popolare le rispettive textbox con i restanti valori: SERVER / USER / PWD


    E' possibile fare un ciclo anche in tal caso?


    Ho cercato di risolvere alla meglio con questo codice.. ma se aumentano le righe, devo modificare il codice manualmente:


    codice:
    If ToolCombo1.Text = (DGVfraz.Item(0, 0).Value) Then
                txtServer.Text = (DGVfraz.Item(1, 0).Value)
                txtUser.Text = (DGVfraz.Item(2, 0).Value)
                TxtPwd.Text = (DGVfraz.Item(3, 0).Value)
            End If
    
    
            If ToolCombo1.Text = (DGVfraz.Item(0, 1).Value) Then
                txtServer.Text = (DGVfraz.Item(1, 1).Value)
                txtUser.Text = (DGVfraz.Item(2, 1).Value)
                TxtPwd.Text = (DGVfraz.Item(3, 1).Value)
            End If
    
    
            If ToolCombo1.Text = (DGVfraz.Item(0, 2).Value) Then
                txtServer.Text = (DGVfraz.Item(1, 2).Value)
                txtUser.Text = (DGVfraz.Item(2, 2).Value)
                TxtPwd.Text = (DGVfraz.Item(3, 2).Value)
            End If
    Potreste aiutarmi ?
    Grazie ancora.
    Fabio

  5. #5
    Utente di HTML.it L'avatar di patel
    Registrato dal
    Jan 2008
    Messaggi
    1,963
    non è la via giusta, devi utilizzare l'evento SelectedIndexChanged e quindi la proprietà SelectedIndex per ricavare il numero di riga della DGV senza bisogno di molti IF.

  6. #6
    Utente di HTML.it L'avatar di patel
    Registrato dal
    Jan 2008
    Messaggi
    1,963
    inoltre mi sembra che la dgv non ti serva a niente, quindi potresti popolare una datatable direttamente dal file di testo e con questa la combo, in rete trovi esempi, specialmente se fai la ricerca in inglese

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2017
    Messaggi
    23
    Ciao patel,
    ancora grazie per il tempo che mi dedichi.

    Hai ragione, la dgv l'ho inserita solo per visualizzare i dati letti.. una sorta di promemoria.

    So che non è corretto chiedere la pappa pronta, ma purtroppo non ho mai usato la funzione "SelectedIndex".

    Ho provato in questo modo, ma riesco a visualizzare sempre solo un dato:



    codice:
       Private Sub ToolCombo1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ToolCombo1.SelectedIndexChanged
    
    
            If Me.ToolCombo1.SelectedIndex = 0 Then
                txtServer.Text = (DGVfraz.Item(1, 0).Value)
            End If
    
    
        End Sub

    Grazie ancora.
    Fabio
    Ultima modifica di Leone77; 13-03-2020 a 10:37

  8. #8
    Utente di HTML.it L'avatar di patel
    Registrato dal
    Jan 2008
    Messaggi
    1,963
    non devi usare IF, il SelectedIndex ti da già il numero di riga della DGV
    Qualcosa del genere:
    codice:
    Private Sub ToolCombo1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ToolCombo1.SelectedIndexChanged
       txtServer.Text = DGVfraz.Item(1, Me.ToolCombo1.SelectedIndex).Value
    End Sub
    se non riesci allega il progetto zippato

  9. #9
    Utente di HTML.it
    Registrato dal
    Aug 2017
    Messaggi
    23
    Ciao,
    ho aggiunto gli altri campi ed il codice funziona correttamente:
    codice:
        Private Sub ToolCombo1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ToolCombo1.SelectedIndexChanged
            txtServer.Text = DGVfraz.Item(1, Me.ToolCombo1.SelectedIndex).Value
            txtUser.Text = DGVfraz.Item(2, Me.ToolCombo1.SelectedIndex).Value
            TxtPwd.Text = DGVfraz.Item(3, Me.ToolCombo1.SelectedIndex).Value
        End Sub

    In realtà, pensavo di utilizzare IF nel tentativo di considerare la necessità di aggiungere al file .txt (in lettura) ulteriori righe (n righe) che dovrebbero essere poi aggiunte alla COMBOBOX.

    In tale caso come si potrebbe integrare il codice?
    Grazie mille.
    Fabio
    Ultima modifica di Leone77; 13-03-2020 a 11:55

  10. #10
    Utente di HTML.it L'avatar di patel
    Registrato dal
    Jan 2008
    Messaggi
    1,963
    Il codice che hai scritto, dopo le modifiche, è in grado di leggere file indipendentemente dal num di righe. Il passaggio successivo, come ti ho già suggerito è:
    1) popolare una datatable leggendo il file
    2) visualizzare la datatable su DGV tramite datasource
    3) popolare la combo direttamente da datatable tramite datasource
    Ultima modifica di patel; 13-03-2020 a 12:38

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 © 2020 vBulletin Solutions, Inc. All rights reserved.