
Furion (Normal User)
Rookie
    
Messaggi: 51
Iscritto: 31/01/2008
|
Questo topic è stato chiuso dal moderatore Salve ragazzi, sto tentando di creare un programmino che mi consenta di riempire con dei dati di prova alcuni database sul mio server locale. In diversi punti del prog eseguo dei comandi/query di mysql e con questi risultati popolo delle DataGridView. Ad un certo punto invoco il comando DESCRIBE <Nome_Tabella> con il quale ottengo una tabella con la descrizione di tutti i campi della tabella specificata. Vorrei inserire questa tabella nella mia DataGridView ma, inspiegabilmente, la mia grid crede che due delle colonne siano di tipo immagine ed, ovviamente, mi da errore e mi mostra una "Finestra di dialogo d'errore predefinita per la DataGridView" o qualcosa del genere. La grid in realtà non possiede alcuna colonna (gliele faccio auto-generare) e questo è il codice che sto usando:
Codice sorgente - presumibilmente VB.NET |
Dim ds As DataSet = New DataSet() adp = New MySQLDataAdapter("DESCRIBE " + table + ";", mainForm.mysqlconn) adp.Fill(ds, "tabella") tabDescGrid.DataSource = ds tabDescGrid.DataMember = ds.Tables(0).TableName
|
Come posso risolvere?
Ultima modifica effettuata da Furion il 10/04/2009 alle 23:36 |
|

Il Totem (Admin)
Guru^2
    
Messaggi: 3635
Iscritto: 24/01/2006
|
Non so che dirti. Hai provato ad aggiungere colonne e righe a mano?
|
|

Furion (Normal User)
Rookie
    
Messaggi: 51
Iscritto: 31/01/2008
|
Si ho provato. Se le aggiungo a mano e gli dico di non auto generarle l'errore non me lo dà perchè la grid non me la riempie. Se invece le aggiungo a mano ma continuo a fargliele auto generare mi da quelle che ho messo io (vuote) + quelle autogenerate (con i valori che voglio) e mi dà lo stesso errore. Da quel poco che ho capito, sembra che lui generi questa eccezione quando tenta di disegnare i contenuti della mia tabella, poichè crede che due delle colonne siano di tipo immagine mentre in realtà l'adattatore MySQL gli passa (giustamente) tutte colonne di tipo stringa.
|
|

Il Totem (Admin)
Guru^2
    
Messaggi: 3635
Iscritto: 24/01/2006
|
Postato originariamente da Furion:
Se le aggiungo a mano e gli dico di non auto generarle l'errore non me lo dà perchè la grid non me la riempie. |
Certo che non te la riepie, devi essere tu a farlo. Era quello che intendevo io. Ossia una cosa del genere:
Codice sorgente - presumibilmente VB.NET |
For Each C As DataColumn In DataSet.Tabella.Columns DataGridView.Columns.Add(C.Caption, C.Caption) Next For Each R As DataRow In DataSet.Tabella.Rows DataGridView.Rows.Add(R.ItemArray()) Next
|
Forse ti dirà che non riesce a convertire Object() in String(), allora scrivi una funzione per farlo, io non ho fatto per velocità. |
|

Furion (Normal User)
Rookie
    
Messaggi: 51
Iscritto: 31/01/2008
|
Oddio scusa: io pensavo che l'attributo "AutoGenerateColumns" di una DataGridView si occupasse solo di aggiungere le colonne alla grid, non che le riempisse anche. Scusate ma con le grid e i dataset sono un super n00b. Allora usando il codice che mi hai dato la faccenda migliora molto perchè non mi da errore. Solo che al posto di uscirmi una cosa tipo
Codice sorgente - presumibilmente C# / VB.NET |
#=============#=============#==========#==============#=================#=======#
# Field # Type # NULL # Key # Default # Extra #
#=============#=============#==========#==============#=================#=======#
# <NomeCampo> # <TipoCampo> # <YES/NO> # <TipoChiave> # <ValoreDefault> # ????? #
#=============#=============#==========#==============#=================#=======#
|
mi esce:
Codice sorgente - presumibilmente C# / VB.NET |
#=============#===============#==========#==============#=================#=======#
# Field # Type # NULL # Key # Default # Extra #
#=============#===============#==========#==============#=================#=======#
# <NomeCampo> # System.Byte[] # <YES/NO> # # # #
#=============#===============#==========#==============#=================#=======#
|
EDIT: Ok ho risolto così
Codice sorgente - presumibilmente VB.NET |
Dim ds As DataSet = New DataSet() adp = New MySQLDataAdapter("DESCRIBE " + table + ";", mainForm.mysqlconn) adp.Fill(ds, "tabella") tabDescGrid.AutoGenerateColumns = False For Each C As DataColumn In ds.Tables("tabella").Columns tabDescGrid.Columns.Add(C.Caption, C.Caption) Next For Each R As DataRow In ds.Tables("tabella").Rows Dim tipo As String = "" For Each b As Byte In R.Item(1) tipo = tipo + Chr(b) Next tabDescGrid.Rows.Add(R.Item(0), tipo, R.Item(2), R.Item(3), R.Item(4), R.Item(5)) Next
|
soluzione rozza ma funzionante  Raga già che ci sono, quando carico un form col comando <NomeForm>.Show(), come faccio ad attivare (nel senso di farci comparire il cursore di modifica, quello lampeggiante) una textbox al suo interno? Ho provato con <NomeTextBox>.Focus() e <NomeTextBox>.Select() ma non accade nulla... ci devo cliccare col mouse per attivarla...  GRAZIE ANCORA DI TUTTO!! Ultima modifica effettuata da Furion il 12/04/2009 alle 18:59 |
|

ruggy94 (Member)
Guru
    
Messaggi: 890
Iscritto: 21/04/2008
|
Penso sia un problema dovuto al fatto che metti il Textbox.Focus() nell'evento Load del form2. È così che stai facendo?
|
|

Il Totem (Admin)
Guru^2
    
Messaggi: 3635
Iscritto: 24/01/2006
|
<Nome form>.<Text Box>.Focus()
questo non va?
|
|

Furion (Normal User)
Rookie
    
Messaggi: 51
Iscritto: 31/01/2008
|
Esatto, ma forse sbaglio evento. In pratica io ho un form in cui ho abilitato la proprietà "IsMDIContainer" (chiamiamolo A) e all'interno del quale faccio caricare altri form, chiamiamo B uno di questi (che poi non è altro che il primo). Ad un certo punto, premendo un bottone di A (per la precisione un ToolStripButton) faccio ricomparire il form B, gestendo l'evento Click del bottone. Una cosa tipo:
evento Click bottoneDiA
Me.formB.Dock = DockStyle.Fill
Me.formB.Show()
// per dichiare il form B, all'interno della classe A ho usato questo codice:
// Public formB As New B()
fine evento
A questo punto, all'interno dell'evento Enter di B (se lo faccio con Load e con Shown non mi funziona), ho messo un piccolo codice che mi pulisce le textbox all'interno di B e alla fine fa
unaDelleTextBoxDiB.Focus()
però la maledetta non si attiva. Abbiate pietà di un povero nubbo autodidatta.
Ultima modifica effettuata da Furion il 13/04/2009 alle 16:41 |
|

ruggy94 (Member)
Guru
    
Messaggi: 890
Iscritto: 21/04/2008
|
Postato originariamente da Furion:
Abbiate pietà di un povero nubbo autodidatta. |
Ahahah non preoccuparti
Basta che il TextBox.Focus() lo metti nel Button_Click()
esempio:
Codice sorgente - presumibilmente VB.NET |
Public Class A Public Form2 As New B Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Me.Form2.Show() Form2.TextBox2.Focus() End Sub End Class
|
In questo codice A è il form contenitore, mentre B è il form figlio. Button1 si trova all'interno del primo form (A), mentre TextBox2 si trova all'interno del form B |
|