85 messaggi dal 04 marzo 2012
Salve, dovrei aggiungere una o più colonne ad un datagridview che ho riempito in precedenza, non riesco a capire come fare, di seguito lascio parte del codice con maggiori dettagli.

in una prima fase leggo il contenuto di una tabella di un db MySql e riempio la datagridview:

Using conn = New MySqlConnection(connectionString)
conn.Open()

Adapter = New MySqlDataAdapter()
Adapter.SelectCommand = New MySqlCommand()
Adapter.SelectCommand.Connection = conn
Adapter.SelectCommand.CommandText = "SELECT ID, Accountname As Azienda, ship_city as Citta, lastname as Cognome, firstname As Nome FROM vw_ht_cust_cont " & _
"ORDER BY accountname, lastname, firstname "

ds = New DataSet()
Adapter.Fill(ds, "Clienti")

If ds.Tables(0).Rows.Count > 0 Then
dt = ds.Tables(0)
End If

dgvClienti.DataSource = dt
ds = Nothing
dt = Nothing
Adapter = Nothing

End Using

dgvClienti.DataBind()


Adesso dovrei aggiungere 2 / 3 colonne al datagridview creato in precedenza, poi scorrendo il contenuto del DGV per ogni row cerco i valori da riempire nelle colonne prendendoli da un'altra tabella presente in un db SQL di un altro server.

Il problema principale non riesco a creare le colonne nel DGV avevo pensato a una cosa del genere ma mi viene segnalato che non posso usare "Integer" è un tipo e non può essere usato come espressione.
dgvClienti.Columns.Add(New DataColumn("Anno", TypeOf(integer)))

Mi sapete dare una dritta per cortesia, grazie.
166 messaggi dal 09 febbraio 2017
Ciao, vediamo se riesco ad aiutarti.

Innanzitutto, hai due modi di gestire un datagrid view ed i suoi dati :

- Dal create user wizard
- da codice

Partiamo dalla prima, che é sempre la soluzione piú facile perché appunto sono procedimenti guidati, tu metti un data source, lo associ al datagrid view, poi fai modifica colonne e da li puoi aggiungere / togliere tutto quello che vuoi. Esempio puoi aggiungere colonne con bottoni, colonne con dati inseriti da te , link o qualsiasi altra cosa.

Da codice é un attimo piú complesso ma fattibile sicuramente, ti metto un link ma poi saprai cercare benissimo come farlo :

https://stackoverflow.com/questions/5524075/programmatically-add-new-column-to-datagridview

Per quanto riguarda l' errore che citi alla fine, credo proprio sia un problema di Cast ma bisognerebbe vedere meglio il codice che hai provato e l' errore preciso.

Emanuel Pirovano
Web Developer
85 messaggi dal 04 marzo 2012
Ho aggiunto la colonna usando questo semplice trucco nell'estrazione dei dati della prima selezione ho aggiunto delle colonne vuote, così da poterle riempire successivamente.

Using conn = New MySqlConnection(connectionString)
conn.Open()

Adapter = New MySqlDataAdapter()
Adapter.SelectCommand = New MySqlCommand()
Adapter.SelectCommand.Connection = conn
Adapter.SelectCommand.CommandText = "SELECT AccountID, ContactID, Accountname As Azienda, ship_city as Citta, lastname as Cognome, firstname As Nome, '' AS Anno, '0' AS Val, '' AS Note, '' AS Consegna FROM vw_ht_cust_cont " & _
"ORDER BY accountname, lastname, firstname "

ds = New DataSet()
Adapter.Fill(ds, "Clienti")

If ds.Tables(0).Rows.Count > 0 Then
dt = ds.Tables(0)
End If

dgvClienti.DataSource = dt

ds = Nothing
dt = Nothing

Adapter = Nothing


End Using

dgvClienti.DataBind()

Così sono riuscito ad aggiungere colonne, adesso però devo riempirle ho provato a fare come segue:

For i = 0 To dgvClienti.Rows.Count - 1

objConnection.Open()
objDataAdapter = New SqlDataAdapter()
objDataAdapter .SelectCommand = New SqlCommand()
objDataAdapter .SelectCommand.Connection = objConnection
objDataAdapter .SelectCommand.CommandText = "SELECT Top 1 * FROM V_Varie WHERE AccountID = " & dgvClienti.Rows(i).Cells(0).Text & " And ContactID = " & dgvClienti.Rows(i).Cells(1).Text & " Order by Year Desc"

objDataSet = New DataSet()
objDataAdapter .Fill(objDataSet, "Varie")

If objDataSet.Tables(0).Rows.Count > 0 Then
dgvClienti.Rows(i).Cells(6).Text = objDataSet.Tables(0).Rows(0).Item("Year")
End If

objDataSet = Nothing
objDataAdapter = Nothing
objConnection.Close()
Next
dgvClienti.DataBind()

Tramite il debug Sembra funzionare il tutto ma il risultato che non si visualizza correttamente la gridview, dove sbaglio?
166 messaggi dal 09 febbraio 2017
In che senso non visualizzi correttamente la grid view ? spiegati meglio .

é un problema di visualizzazione o di popolamento ?

hai dato un occhio ad altri modi di implementare la questione ? il databind ?

Leggi qui : https://www.aspsnippets.com/Articles/Dynamically-add-BoundField-and-TemplateField-Columns-to-GridView-in-ASPNet.aspx

Emanuel Pirovano
Web Developer
85 messaggi dal 04 marzo 2012
E' un problema di visualizzazione, ma ho risolto creando la datagridview completamente e mano e caricando i dati record per record ricercando le informazioni che mi servivano al volo, vedi sotto, ringrazio comunque per le dritte.
Using conn = New MySqlConnection(connectionString)
conn.Open()

Adapter = New MySqlDataAdapter()
Adapter.SelectCommand = New MySqlCommand()
Adapter.SelectCommand.Connection = conn
Adapter.SelectCommand.CommandText = "SELECT AccountID, ContactID, Accountname As Azienda, ship_city as Citta, lastname as Cognome, firstname As Nome FROM vw_ht_cust_cont " & _
"ORDER BY accountname, lastname, firstname "

ds = New DataSet()
Adapter.Fill(ds, "Clienti")

If ds.Tables(0).Rows.Count > 0 Then

table = New System.Data.DataTable

column = New DataColumn()
column.DataType = System.Type.GetType("System.Single")
column.ColumnName = "AccountID"
column.ReadOnly = True
column.Unique = False
table.Columns.Add(column)

column = New DataColumn()
column.DataType = System.Type.GetType("System.Single")
column.ColumnName = "ContactID"
column.ReadOnly = True
column.Unique = False
table.Columns.Add(column)

column = New DataColumn()
column.DataType = System.Type.GetType("System.String")
column.ColumnName = "Azienda"
column.ReadOnly = True
column.Unique = False
table.Columns.Add(column)

column = New DataColumn()
column.DataType = System.Type.GetType("System.String")
column.ColumnName = "Citta"
column.ReadOnly = True
column.Unique = False
table.Columns.Add(column)

column = New DataColumn()
column.DataType = System.Type.GetType("System.String")
column.ColumnName = "Cognome"
column.ReadOnly = True
column.Unique = False
table.Columns.Add(column)

column = New DataColumn()
column.DataType = System.Type.GetType("System.String")
column.ColumnName = "Nome"
column.ReadOnly = True
column.Unique = False
table.Columns.Add(column)

column = New DataColumn()
column.DataType = System.Type.GetType("System.String")
column.ColumnName = "Anno"
column.ReadOnly = True
column.Unique = False
table.Columns.Add(column)

column = New DataColumn()
column.DataType = System.Type.GetType("System.String")
column.ColumnName = "Cal"
column.ReadOnly = True
column.Unique = False
table.Columns.Add(column)

column = New DataColumn()
column.DataType = System.Type.GetType("System.String")
column.ColumnName = "Gift"
column.ReadOnly = True
column.Unique = False
table.Columns.Add(column)

column = New DataColumn()
column.DataType = System.Type.GetType("System.String")
column.ColumnName = "Consegna"
column.ReadOnly = True
column.Unique = False
table.Columns.Add(column)

For i = 0 To ds.Tables(0).Rows.Count - 1
row = table.NewRow()
row("AccountID") = ds.Tables(0).Rows(i).Item(0)
row("ContactID") = ds.Tables(0).Rows(i).Item(1)
row("Azienda") = ds.Tables(0).Rows(i).Item(2)
row("Citta") = ds.Tables(0).Rows(i).Item(3)
row("Cognome") = ds.Tables(0).Rows(i).Item(4)
row("Nome") = ds.Tables(0).Rows(i).Item(5)

objConnection = New SqlConnection(ConfigurationManager.ConnectionStrings("HTS_GestioneConnectionString").ConnectionString)
objConnection.Open()
objDataAdapter = New SqlDataAdapter()
objDataAdapter.SelectCommand = New SqlCommand()
objDataAdapter.SelectCommand.Connection = objConnection
objDataAdapter.SelectCommand.CommandText = "SELECT Top 1 * FROM V_Varie WHERE AccountID = " & ds.Tables(0).Rows(i).Item(0) & " And ContactID = " & ds.Tables(0).Rows(i).Item(1) & " And Year = " & Year(Now) - 1 & " Order by Year Desc"

objDataSet = New DataSet()
objDataAdapter.Fill(objDataSet, "Omaggi")

If objDataSet.Tables(0).Rows.Count > 0 Then

row("Anno") = objDataSet.Tables(0).Rows(0).Item("Year")
If objDataSet.Tables(0).Rows(0).Item("Calendar") = 1 Then
row("Cal") = "S"
Else
row("Cal") = ""
End If

row("Gift") = objDataSet.Tables(0).Rows(0).Item("Gift")
row("Consegna") = objDataSet.Tables(0).Rows(0).Item("Delivery")

End If

objDataSet = Nothing
objDataAdapter = Nothing
objConnection.Close()

table.Rows.Add(row)
Next

End If

dgvClienti.DataSource = table

ds = Nothing
dt = Nothing

Adapter = Nothing


End Using

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.