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 - Formattazione datagrid
Forum - C# / VB.NET - Formattazione datagrid

Avatar
dartraf (Normal User)
Pro


Messaggi: 71
Iscritto: 15/12/2005

Segnala al moderatore
Postato alle 21:08
Lunedì, 04/01/2010
Ciao a tutti,
sto realizzando un software in vb.net che accede a dati di un archivio access.
Devo caricare una query e mostrarne i risultati in una datagrid.
La query è  
Codice sorgente - presumibilmente C# / VB.NET

  1. "SELECT KEY, (CONTRATTO_NUM & CONTRATTO_ALFA) AS CONTRATTO, NUM_LAMPADE AS [NUMERO LAMPADE], (CANONEDA) AS MESE FROM CONTRATTI"


il mese pero è memorizzato come numero quindi sulla griglia mi esce 1 invece di Gennaio.
Come posso fare ad ottenere il nome del mese?

Per il resto utilizzo un OleDb.OleDbDataAdapter e un Dataset come fonte dati per la griglia

PM Quote
Avatar
LittleHacker (Member)
Guru


Messaggi: 1033
Iscritto: 28/04/2009

Segnala al moderatore
Postato alle 21:18
Lunedì, 04/01/2010
Testo quotato

Postato originariamente da dartraf:

Come posso fare ad ottenere il nome del mese?



Utilizzi un'if e dici se il mese è = a 1 allora scrivi gennaio e è 2 scrivi febbraio etc...:k:

PM Quote
Avatar
Alfonso (Ex-Member)
Guru


Messaggi: 688
Iscritto: 30/09/2009

Segnala al moderatore
Postato alle 0:02
Martedì, 05/01/2010
Casomai:

Dim Data As Date = "01/" & tuomese & "/2000"
MsgBox(Data.ToString("MMMM"))


Se vuoi sapere come deve essere la query per avere come risultato il nome del mese:

NomeDelMese(Canoneda) as mese

dove NomeDelMese è una function con le istruzioni precedenti adattate.

Ultima modifica effettuata da Alfonso il 05/01/2010 alle 9:42
PM Quote
Avatar
dartraf (Normal User)
Pro


Messaggi: 71
Iscritto: 15/12/2005

Segnala al moderatore
Postato alle 12:51
Martedì, 05/01/2010
Forse non mi sono spiegato bene...un tipo esempio di record che esce da quella query è
CONTRATTO=3,NUMERO LAMPADE=10,MESE=2
andando a imporre alla datagrid come datasource il dataset mi trovo sulla griglia questi valori e quindi il mese scritto in numeri.
Invece vorrei il mese scritto in stringa quindi ho provato ad intervenire sulla query (ad esempio qlcs tipo "monthname") ma niente e quindi ho pensato che a runtime potessi impostare la formattazione della griglia in modo tale che quanto questa vede il numero 1 nella terza colonna ci associ il nome Gennaio.
Spero di essere stato chiaro cmq posto un po di codice
Codice sorgente - presumibilmente VB.NET

  1. Dim dsDataset As New DataSet
  2.         Dim dvVista As DataView
  3.         Dim cnNW As New OleDb.OleDbConnection(strConnessioneClienti)
  4.         Dim strSql As String = "SELECT KEY, (CONTRATTO_NUM & CONTRATTO_ALFA) AS CONTRATTO, NUM_LAMPADE AS [NUMERO LAMPADE], (CANONEDA) AS MESE FROM CONTRATTI"
  5.         Dim daLettore As New OleDb.OleDbDataAdapter(strSql, cnNW)
  6.  
  7.         daLettore.Fill(dsDataset, "contratti")
  8.         If dsDataset.Tables("contratti").Rows.Count <> 0 Then
  9.             dvVista = dsDataset.Tables("contratti").DefaultView
  10.             flxGriglia.DataSource = dvVista
  11.             flxGriglia.Columns(0).Visible = False
  12.         Else
  13.             Me.Close()
  14.         End If


PM Quote
Avatar
LittleHacker (Member)
Guru


Messaggi: 1033
Iscritto: 28/04/2009

Segnala al moderatore
Postato alle 16:09
Martedì, 05/01/2010
X me è giusto il mio metodo cioè utilizzare un'if...Poi fate cm volete...:k:

PM Quote
Avatar
Alfonso (Ex-Member)
Guru


Messaggi: 688
Iscritto: 30/09/2009

Segnala al moderatore
Postato alle 17:48
Martedì, 05/01/2010
A run time:
Ammesso che la colonna CanoneDa sia la terza

Codice sorgente - presumibilmente VB.NET

  1. Private Sub DataGridView1_CellFormatting(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) Handles DataGridView1.CellFormatting
  2.  
  3.         If Me.DataGridView1.Columns(e.ColumnIndex).Index = 3 Then
  4.  
  5.             If e IsNot Nothing Then
  6.                 If e.Value IsNot Nothing Then
  7.                     Try
  8.                         e.Value = NomeDelMese(e.Value.ToString())
  9.                         e.FormattingApplied = True
  10.                     Catch ex As FormatException
  11.                         Console.WriteLine("{0} is not a valid date.", e.Value.ToString())
  12.                     End Try
  13.                 End If
  14.             End If
  15.  
  16.         End If
  17.  
  18.     End Sub
  19.  
  20.     Private Function NomeDelMese(ByVal i As Integer) As String
  21.  
  22.         Dim Data As Date = "01/" & i & "/2000"
  23.         NomeDelMese = (Data.ToString("MMMM"))
  24.  
  25.     End Function



Da query dovrebbe essere (però non ho modo di provarla):

"SELECT KEY, (CONTRATTO_NUM & CONTRATTO_ALFA) as CONTRATTO, NUM_LAMPADE as [NUMERO LAMPADE], NomeDelMese(CANONEDA) as MESE FROM CONTRATTI"

Sempre che CanoneDa sia un integer usando sempre la function precedente.

Ultima modifica effettuata da Alfonso il 05/01/2010 alle 18:08
PM Quote
Avatar
dartraf (Normal User)
Pro


Messaggi: 71
Iscritto: 15/12/2005

Segnala al moderatore
Postato alle 13:36
Mercoledì, 06/01/2010
Grazie alfonso era quello che cercavo!:)

PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 17:36
Giovedì, 07/01/2010
Testo quotato

Postato originariamente da LittleHacker:

X me è giusto il mio metodo cioè utilizzare un'if...Poi fate cm volete...:k:



Un'if dove? E solo uno? E come lo integri a livello di query?

Le tue risposte sono sempre inconcludenti.

PM Quote