Non mi carica i dati in una listview quando incontra valori nulli

domenica 25 gennaio 2009 - 14.28

Mau67 Profilo | Expert

Salve a tutto il forum,

Ho un form sviluppato in visual studio 2008 (winform) dove faccio caricare dei dati in un listview con il seguente codice:

For Each dsRiga In dsDataSet.Tables(0).Rows
ListView1.Items.Add(dsRiga("Reparto"))
ListView1.Items(intConta).SubItems.Add(dsRiga("Dal"))
ListView1.Items(intConta).SubItems.Add(dsRiga("Al"))
ListView1.Items(intConta).SubItems.Add(dsRiga("AnniNu")) <<<<<<< da qui in giù i campi in molte occasioni possono essere nulli
ListView1.Items(intConta).SubItems.Add(dsRiga("MesiNu"))
ListView1.Items(intConta).SubItems.Add(dsRiga("GiorniNu"))
ListView1.Items(intConta).SubItems.Add(dsRiga("AnniUm"))
ListView1.Items(intConta).SubItems.Add(dsRiga("MesiUm"))
ListView1.Items(intConta).SubItems.Add(dsRiga("GiorniUm"))
ListView1.Items(intConta).SubItems.Add(dsRiga("AnniCa"))
ListView1.Items(intConta).SubItems.Add(dsRiga("MesiCa"))
ListView1.Items(intConta).SubItems.Add(dsRiga("GiorniCa"))
ListView1.Items(intConta).SubItems.Add(dsRiga("AnniSc"))
ListView1.Items(intConta).SubItems.Add(dsRiga("MesiSc"))
ListView1.Items(intConta).SubItems.Add(dsRiga("GiorniSc"))
ListView1.Items(intConta).SubItems.Add(dsRiga("AnniTa"))
ListView1.Items(intConta).SubItems.Add(dsRiga("MesiTa"))
ListView1.Items(intConta).SubItems.Add(dsRiga("GiorniTa"))
ListView1.Items(intConta).SubItems.Add(dsRiga("AnniPa"))
ListView1.Items(intConta).SubItems.Add(dsRiga("MesiPa"))
ListView1.Items(intConta).SubItems.Add(dsRiga("GiorniPa"))
ListView1.Items(intConta).SubItems.Add(dsRiga("AnniAn1"))
ListView1.Items(intConta).SubItems.Add(dsRiga("MesiAn1"))
ListView1.Items(intConta).SubItems.Add(dsRiga("GiorniAn1"))
ListView1.Items(intConta).SubItems.Add(dsRiga("AnniAn2"))
ListView1.Items(intConta).SubItems.Add(dsRiga("MesiAn2"))
ListView1.Items(intConta).SubItems.Add(dsRiga("GiorniAn2"))
ListView1.Items(intConta).SubItems.Add(dsRiga("AnniMu"))
ListView1.Items(intConta).SubItems.Add(dsRiga("MesiMu"))
ListView1.Items(intConta).SubItems.Add(dsRiga("GiorniMu"))
intConta = intConta + 1
Next

Sono costretto a inserire nel database in tutti i campi uno "zero" e chiaramente me lo visualizza io invece vorrei che se in fase di caricamento i valori nulli rimanessero tali e che il processo di caricamento andasse a termine con i valori che trova come devo fare?

Grazie in anticipo

Mau67

ilario Profilo | Senior Member

io faccio cosi

txtIdArticoli.Text = CStr(ValueNull(Dr.Item(0), "string"))




Public Function ValueNull(ByVal objData As Object, ByVal tipo As String) As Object
ValueNull = ""

If (objData) Is System.DBNull.Value Then
Select Case tipo
Case "index"
Return -1
Case "Int16", "Int32", "Int64", _
"Decimal", "Double", _
"Single", "UInt16", "UInt32", "UInt64"
Return 0
Case "string"
Return ""
Case "DateTime"
Return DateTime.MinValue
Case "Boolean"
Return False
End Select
Else
Return objData
End If

End Function


poi se ti puo essere utile io non uso dsDataSet ma magari riesci ad adattare queste sub

la prima
CaricaListview(lswfornitore, "select idfornitore,nome from fornitore order by nome asc ", 2, 0)

la seconda ti crea anche le colonne

Struttura = "ID,idscheda 0,left|Nome,nominativi,200,center|Giorno,giorno,150,center|Email,email,200,left|Nome Sposa,nomesposa,150,right|Nome Sposo,nomesposo,150,center" ' "Nome,Giorno,Email,Nome Sposa, Nome Sposo")

lswlista.Clear()
'carica la lista
ConnettiDB("nomedb", Me)
CaricaListviewStruttura(Me, lswlista, sql, Struttura)
Chiudidb()


Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

ciao
ilario

alexmed Profilo | Guru

Ciao

Ho provato ad impostare nella tabella qualche valore a NULL e con questa procedura sembra caricare tutto

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Fammi sapere
Ciao
alexmed

Mau67 Profilo | Expert

Grazie Alex Funziona, c' è solo un problema quando seleziono un altro record dalla combobox mi duplica i campi in orizzontale

Per farti capire

Nella listview all'apertura del form trovo questa situazione:

COMUNE CAP PREFISSO TEL COD NAZIONALE COD ISTAT


Appena seleziono un altro comune dal combobox trovo nella listview questa situazione duplicata:

COMUNE CAP PREFISSO TEL COD NAZIONALE COD ISTAT COMUNE CAP PREFISSO TEL COD NAZIONALE COD ISTAT

Come risolvo?

Grazie
Mau67

alexmed Profilo | Guru

Ciao
Quando tu selezioni un item dalla combo vuoi caricare solo quello nella listview oppure vuoi aggiungerlo alla listview?

Ciao
alexmed

Mau67 Profilo | Expert

Ciao

Devo caricare i dati e quindi trovarmi sempre in questa situazione:

COMUNE CAP PREFISSO TEL COD NAZIONALE COD ISTAT

aaaa 111 212121 12 11dd er 22



e non in questa questa situazione:

COMUNE CAP PREFISSO TEL COD NAZIONALE COD ISTAT COMUNE CAP PREFISSO TEL COD NAZIONALE COD ISTAT

aaaa 111 212121 12 11dd er 22 aaaa 111 212121 12 11dd er 22



non so se sono stato chiaro ciao

Mau67

alexmed Profilo | Guru

Ciao
Dunque
se devi caricare un item alla volta in cima al codice metti

Me.ListView1.Columns.Clear()

Ovvero ripulisci la ListView ogni volta che carichi l'items

Se invece vuoi man mano aggiungere l'item alla listview allora prima di creare le colonne metti

If Me.ListView1.Columns.Count <= 0 Then

ListView1.Columns.Add("COMUNE", -2, HorizontalAlignment.Left)
ListView1.Columns.Add("CAP", -2, HorizontalAlignment.Left)
ListView1.Columns.Add("PREFISSO TEL", -2, HorizontalAlignment.Right)
ListView1.Columns.Add("COD NAZIONALE", -2, HorizontalAlignment.Center)
ListView1.Columns.Add("COD ISTAT", -2, HorizontalAlignment.Center)

End If

Ciao
alexmed

Mau67 Profilo | Expert

ok perfetto funziona grazie

Ho un altro problema

ho sempre usato DataGridView per inserire i dati dei miei progetti, adesso vorrei cambiare stile ed usare i ListView.

Vi descrivo il mio problema:

Per calcolare i totali delle colonne in un DataGridView uso il seguente codice

Private Sub Totali()
'Dichiaro le variabili di tipo double che memorizza il totale
Dim DblTotaleAnniNU As Double
Dim DblTotaleMesiNU As Double
Dim DblTotaleGiorniNU As Double


'Ciclo tutte le righe e sommo il valore della colonna Giorni non utili

For Each CurRow As DataGridViewRow In Me.ServiziDataGridView.Rows
If IsNumeric(CurRow.Cells("DataGridViewTextBoxColumn8").Value) Then
DblTotaleGiorniNU += CurRow.Cells("DataGridViewTextBoxColumn8").Value
End If
Next

' Visualizzo il risultato nella textbox
Me.TextBox1.Text = CInt((((DblTotaleGiorniNU) / 30) - Fix(((DblTotaleGiorniNU) / 30))) * 30)
End Sub

Adesso lo stesso risultato lo vorrei ottenere sommando le colonne in un listview come faccio mantenendo lo stesso metodo?

Ciao grazie

Mau67

alexmed Profilo | Guru

>ok perfetto funziona grazie
Prego!

>Ho un altro problema
Beato te che ne hai solo uno!!!

>ho sempre usato DataGridView per inserire i dati dei miei progetti, adesso vorrei cambiare stile ed usare i ListView.
Ho visto che hai aperto un Threads.
Chiudi questo intanto faccio due prove e ti rispondo sull'altro.

Ciao

alexmed

Mau67 Profilo | Expert

ok grazie
Mau67
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5