Listview e problemi di posizioni

sabato 03 settembre 2011 - 15.15
Tag Elenco Tags  VB.NET  |  Visual Studio 2008  |  MySQL 5.1

Mau67 Profilo | Expert

Ciao al forum,
stò sbattendo la testa su un problema che per qualcuno di voi potrebbe essere estremamente semplice,
ho un win form in visual studio 2008 contenente una listview,
Questa è la struttura della listview

Me.ListView1.Columns.Clear()
Connection.Open()

Dim thisReader As MySqlDataReader = thisCommand.ExecuteReader()

While (thisReader.Read())
Dim item As New ListViewItem(thisReader.Item(0).ToString, 0)
item.SubItems.Add(thisReader.Item(1).ToString)
item.SubItems.Add(thisReader.Item(2).ToString)
item.SubItems.Add(thisReader.Item(3).ToString)
item.SubItems.Add(0) <<<<<<<< Qui devo inserire dati numerici da inputbox
item.SubItems.Add(0)<<<<<<<< Qui devo inserire dati numerici da inputbox

ListView1.Items.AddRange(New ListViewItem() {item})
End While

ListView1.Columns.Add("ID", 25, HorizontalAlignment.Left)
ListView1.Columns.Add("COMPETENZA", 300, HorizontalAlignment.Left)
ListView1.Columns.Add("TIPOLOGIA", 0, HorizontalAlignment.Center)
ListView1.Columns.Add("TREDICESIMA", 0, HorizontalAlignment.Center)
ListView1.Columns.Add("DOVUTO", 50, HorizontalAlignment.Center)
ListView1.Columns.Add("PERCEPITO", 50, HorizontalAlignment.Center)
Catch ex As Exception
'MsgBox(ex.Message)

End Try
Connection.Close()


i dati numerici li inserisco da qui:

Private Sub ListView1_ItemChecked(ByVal sender As Object, ByVal e As System.Windows.Forms.ItemCheckedEventArgs) Handles ListView1.ItemChecked
Dim id As ListViewItem
Dim idCollection As ListView.CheckedListViewItemCollection = Me.ListView1.CheckedItems
For Each id In idCollection
If id.Checked = True Then
m_ParametroIDCompetenza = id.Text
m_ParametroTipologia = id.SubItems(2).Text
m_ParametroTredicesima = id.SubItems(3).Text
Id.SubItems(4).Text = InputBox("DOVUTO")
Id.SubItems(5).Text = InputBox("PERCEPITO")

End If
Next
End Sub

il problema è questo, se fleggo un solo chekbox della listview mi aggiunge i dati nella posizione desiderata, se fleggo più di un chekbox mi cicla i checkbox aprendo le inputbox quanti sono i flag
come faccio a inserire i dati nelle posizioni desiderate?

grazie in anticipo
Mau67

u235 Profilo | Junior Member

non è necessario che cicli ogni volta tutti gli item, infatti ti basta recuperare l'index dell'item :

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

ciao

Mau67 Profilo | Expert

perfetto grazie, la soluzione è sempre quella più semplice.
Ciao
Mau67

u235 Profilo | Junior Member

Figurati.

A presto, ciao.

Mau67 Profilo | Expert

Ciao scusami ma ho parlato troppo presto,
ho fatto il format dei campi da inserire finchè premo il button Ok nessun problema, ma appena premo il button annulla mi va in crash come posso risolvere

Private Sub ListView1_ItemCheck(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ItemCheckEventArgs) Handles ListView1.ItemCheck
'recupere l'indice dell'insieme che ha cambiato stato (Checked o Unchecked)
Dim id As ListViewItem = Me.ListView1.Items(e.Index)
'controlli se lo stato del nuovo valore che prenderà è Checked
If e.NewValue = CheckState.Checked Then
id.SubItems(4).Text = Format(CType(InputBox("DOVUTO", "Inserisci Importo mensile", 0), Decimal), "###,##0.00")
id.SubItems(5).Text = Format(CType(InputBox("PERCEPITO", "Inserisci Importo mensile", 0), Decimal), "###,##0.00")
'volendo potresti controllare se è tutto ok (ad esempio se ha inserito
'testo corretto nelle inputBox), nel caso non sia tutto ok puoi usare
'e.NewValue = CheckState.Unchecked
'per fare in modo che lo stato ritorni a Unchecked
'e dare la possibilità di rifare l'operazione ripremendo il checkBox
End If
End Sub

Grazie
Mau67

u235 Profilo | Junior Member

ciao, il problema è che devi controllare la stringa restituita da InputBox, se fai annulla la stringa e vuota. Ti consiglio inoltre di usare i blicchi try e catch per intercettare eventuali errori di formattazione ed avvisare l'utente (non si sa mai cosa combina l'utonto), nonchè riportare i valori allo stato precedente...
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Mau67 Profilo | Expert

Perfetto grazie
Ciao buona domenica e alla prossima
Mau67

u235 Profilo | Junior Member

FIgurati.

buona domenica anche a te.

ciao.
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-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5