Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - [Visual Basic 2005] MySQLDriverCS e DataGridView
Forum - C# / VB.NET - [Visual Basic 2005] MySQLDriverCS e DataGridView

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
Furion (Normal User)
Rookie


Messaggi: 51
Iscritto: 31/01/2008

Segnala al moderatore
Postato alle 23:35
Venerdì, 10/04/2009
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

  1. Dim ds As DataSet = New DataSet()
  2. adp = New MySQLDataAdapter("DESCRIBE " + table + ";", mainForm.mysqlconn)
  3. adp.Fill(ds, "tabella")
  4. tabDescGrid.DataSource = ds
  5. tabDescGrid.DataMember = ds.Tables(0).TableName



Come posso risolvere? :(

Ultima modifica effettuata da Furion il 10/04/2009 alle 23:36
PM
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 10:22
Sabato, 11/04/2009
Non so che dirti. Hai provato ad aggiungere colonne e righe a mano?

PM
Avatar
Furion (Normal User)
Rookie


Messaggi: 51
Iscritto: 31/01/2008

Segnala al moderatore
Postato alle 11:10
Sabato, 11/04/2009
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.

PM
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 10:56
Domenica, 12/04/2009
Testo quotato

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

  1. For Each C As DataColumn In DataSet.Tabella.Columns
  2.   DataGridView.Columns.Add(C.Caption, C.Caption)
  3. Next
  4. For Each R As DataRow In DataSet.Tabella.Rows
  5.   DataGridView.Rows.Add(R.ItemArray())
  6. Next


Forse ti dirà che non riesce a convertire Object() in String(), allora scrivi una funzione per farlo, io non ho fatto per velocità.

PM
Avatar
Furion (Normal User)
Rookie


Messaggi: 51
Iscritto: 31/01/2008

Segnala al moderatore
Postato alle 18:46
Domenica, 12/04/2009
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

  1. #=============#=============#==========#==============#=================#=======#
  2. # Field       # Type        # NULL     # Key          # Default         # Extra #
  3. #=============#=============#==========#==============#=================#=======#
  4. # <NomeCampo> # <TipoCampo> # <YES/NO> # <TipoChiave> # <ValoreDefault> # ????? #
  5. #=============#=============#==========#==============#=================#=======#



mi esce:

Codice sorgente - presumibilmente C# / VB.NET

  1. #=============#===============#==========#==============#=================#=======#
  2. # Field       # Type          # NULL     # Key          # Default         # Extra #
  3. #=============#===============#==========#==============#=================#=======#
  4. # <NomeCampo> # System.Byte[] # <YES/NO> #              #                 #       #
  5. #=============#===============#==========#==============#=================#=======#



EDIT: Ok ho risolto così

Codice sorgente - presumibilmente VB.NET

  1. Dim ds As DataSet = New DataSet()
  2. adp = New MySQLDataAdapter("DESCRIBE " + table + ";", mainForm.mysqlconn)
  3. adp.Fill(ds, "tabella")
  4. tabDescGrid.AutoGenerateColumns = False
  5. For Each C As DataColumn In ds.Tables("tabella").Columns
  6.     tabDescGrid.Columns.Add(C.Caption, C.Caption)
  7. Next
  8. For Each R As DataRow In ds.Tables("tabella").Rows
  9.     Dim tipo As String = ""
  10.     For Each b As Byte In R.Item(1)
  11.         tipo = tipo + Chr(b)
  12.     Next
  13.     tabDescGrid.Rows.Add(R.Item(0), tipo, R.Item(2), R.Item(3), R.Item(4), R.Item(5))
  14. Next



soluzione rozza ma funzionante :rofl: 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... :D GRAZIE ANCORA DI TUTTO!! :yup:

Ultima modifica effettuata da Furion il 12/04/2009 alle 18:59
PM
Avatar
ruggy94 (Member)
Guru


Messaggi: 890
Iscritto: 21/04/2008

Segnala al moderatore
Postato alle 21:46
Domenica, 12/04/2009
Penso sia un problema dovuto al fatto che metti il Textbox.Focus() nell'evento Load del form2. È così che stai facendo?

PM
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 10:15
Lunedì, 13/04/2009
<Nome form>.<Text Box>.Focus()
questo non va?

PM
Avatar
Furion (Normal User)
Rookie


Messaggi: 51
Iscritto: 31/01/2008

Segnala al moderatore
Postato alle 16:39
Lunedì, 13/04/2009
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
PM
Avatar
ruggy94 (Member)
Guru


Messaggi: 890
Iscritto: 21/04/2008

Segnala al moderatore
Postato alle 16:48
Lunedì, 13/04/2009
Testo quotato

Postato originariamente da Furion:
Abbiate pietà di un povero nubbo autodidatta.


Ahahah non preoccuparti :D
Basta che il TextBox.Focus() lo metti nel Button_Click()
esempio:
Codice sorgente - presumibilmente VB.NET

  1. Public Class A
  2.     Public Form2 As New B
  3.  
  4.     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  5.         Me.Form2.Show()
  6.         Form2.TextBox2.Focus()
  7.     End Sub
  8. 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

PM
Pagine: [ 1 2 ] Precedente | Prossimo