' reste à écrire mon_compte.lignes dans le listview ! ListView1.BeginUpdate() ' efface les anciennes lignes ListView1.Items.Clear() ' dim les nouvelles lignes Dim listItem As ListViewItem 'pour chaque lignes (si lignes vides count=0, donc pour ne pas faire la boucle ajouter -1, ' mais pas au count à la variable de boucle ligne qui elle DOIT commencer à 1 et pas à 0 ! => PCPT) For ligne As Integer = 1 To mon_compte.lignes.Count listItem = New ListViewItem listItem.Text = (mon_compte.lignes.Item(ligne - 1).L_date.ToString("yyyy MM dd")) 'ne sert plus à rien à virer !!!!!!!!! 04/01/10 listItem.SubItems.Add(mon_compte.lignes.Item(ligne - 1).L_date.ToString("dd MMMM yy")) listItem.SubItems.Add(mon_compte.lignes.Item(ligne - 1).L_type.ToString) listItem.SubItems.Add(mon_compte.lignes.Item(ligne - 1).L_budget.ToString) listItem.SubItems.Add(mon_compte.lignes.Item(ligne - 1).L_commentaire.ToString) listItem.SubItems.Add(mon_compte.lignes.Item(ligne - 1).L_credit.ToString) listItem.SubItems.Add(mon_compte.lignes.Item(ligne - 1).L_debit.ToString) listItem.SubItems.Add(mon_compte.lignes.Item(ligne - 1).L_pointage.ToString) listItem.SubItems.Add(mon_compte.lignes.Item(ligne - 1).L_mensuel.ToString) ListView1.Items.Add(listItem) ' ajoute les lignes Next ligne listItem = Nothing 'détruit les nouvelles lignes en mémoire ListView1.EndUpdate()
'---------------------------------------------------------------------- ' fonction qui trie le fichier sérialisé de class CLS_compte ' par date croissante, via la class CLS_trie_lignes.vb '---------------------------------------------------------------------- Public Sub trie() Dim MonTrie As New CLS_trie_lignes Me.lignes.Sort(MonTrie) End Sub
Imports System Imports System.Collections.Generic Public Class CLS_trie_lignes Implements IComparer(Of CLS_lignes) Public Function CompareByDate(ByVal x As CLS_lignes, ByVal y As CLS_lignes) As Integer _ Implements System.Collections.Generic.IComparer(Of CLS_lignes).Compare ' compare les dates et retourne un integer pour le manager de la fonction (transparent) If x.L_date > y.L_date Then Return -1 ElseIf x.L_date = y.L_date Then Return 0 Else Return 1 End If End Function End Class
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionpas cachée mais c'est une propriété oui
For ligne As Integer = 1 To mon_compte.lignes.Count 'affiche dans la listview que les lignes non pointé si l'option affiche ligne ok est à false If affiche_ligne_ok Or mon_compte.lignes(ligne - 1).L_pointage = False Then listItem = New ListViewItem listItem.Text = (mon_compte.lignes.Item(ligne - 1).L_date.ToString("yyyy MM dd")) 'ne sert plus à rien à virer !!!!!!!!! 04/01/10 listItem.SubItems.Add(mon_compte.lignes.Item(ligne - 1).L_date.ToString("dd MMMM yy")) listItem.SubItems.Add(mon_compte.lignes.Item(ligne - 1).L_type) listItem.SubItems.Add(mon_compte.lignes.Item(ligne - 1).L_budget) listItem.SubItems.Add(mon_compte.lignes.Item(ligne - 1).L_commentaire) listItem.SubItems.Add(mon_compte.lignes.Item(ligne - 1).L_credit.ToString) listItem.SubItems.Add(mon_compte.lignes.Item(ligne - 1).L_debit.ToString) listItem.SubItems.Add(mon_compte.lignes.Item(ligne - 1).L_pointage.ToString) listItem.SubItems.Add(mon_compte.lignes.Item(ligne - 1).L_mensuel.ToString) 'pas besoin de cette ligne dans la list ! ListView1.Items.Add(listItem) ' ajoute les lignes End If Next ligne listItem = Nothing 'détruit les nouvelles lignes en mémoire ListView1.EndUpdate()
Private Sub tsmDelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tsmDelete.Click Dim pos1 As Integer = ListView1.SelectedItems.Item(0).Index Dim pos2 As Integer = CurrentAccount.GetItemByGuid(ListView1.SelectedItems.Item(0).Text) If MessageBox.Show("Êtes-vous sûr de vouloir supprimer cet élément", "Suppression définitive!", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation) = Windows.Forms.DialogResult.Yes Then CurrentAccount.Items.RemoveAt(pos2) ListView1.Items.RemoveAt(pos1) CurrentAccount.Save() End If End Sub
Private Shared Function ComparisonByDateOperationAsc(ByVal x As clsAccountItem, ByVal y As clsAccountItem) As Integer Return x.DateOperation.CompareTo(y.DateOperation) End Function Private Shared Function ComparisonByDateOperationDesc(ByVal x As clsAccountItem, ByVal y As clsAccountItem) As Integer Return y.DateOperation.CompareTo(x.DateOperation) End Function
Public Sub SortItems(ByVal SortOrder As SortOrderConstants, ByVal SortField As SortFieldConstants) Select Case SortField Case SortFieldConstants.DateOperation If SortOrder = SortOrderConstants.ByASC Then Me.Items.Sort(AddressOf ComparisonByDateOperationAsc) ElseIf SortOrder = SortOrderConstants.ByDESC Then Me.Items.Sort(AddressOf ComparisonByDateOperationDesc) End If ' (..........)
de ton côté l'erreur vient surement du fait que tu n'as pas toujours le même format date :
des fois cdate(a & " " & b & " " & c)
des fois datetipicker...
Private Sub Bp_ok_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Bp_ok.Click ' vérifie que les champs crédit et débit sont valides avant d'écrire ou modifier une ligne ! If txt_credit.Text "0" And txt_debit.Text "0" Then MessageBox.Show("Opération invalide" & Environment.NewLine & "Crédit et Débit NULL" _ , "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) txt_credit.Focus() Exit Sub Else ' sinon ajoute les nouvelles valeurs à l'enfant new_ligne et ferme Dim leGuid As Guid = Guid.NewGuid() 'déclare un nouvel ID With new_ligne ' leGuis ne peux avoir que quelque formatage voir ici : http://msdn.microsoft.com/fr-fr/library/97af8hh4(VS.95).aspx .L_Id = leGuid.ToString(calendrier.SelectionRange.Start.ToString) 'génére le nouvel ID .L_date = calendrier.SelectionRange.Start .L_type = Combo_type.Text .L_budget = Combo_budget.Text .L_commentaire = "pas encore fait" .L_credit = CDbl(txt_credit.Text) 'lecredit .L_debit = ledebit .L_pointage = Chk_pointage.Checked .L_mensuel = Chk_mensuel.Checked End With valide = True Me.Close() Me.Dispose() End If End Sub
' reste à écrire mon_compte.lignes dans le listview ! ListView1.BeginUpdate() ' efface les anciennes lignes ListView1.Items.Clear() ' dim les nouvelles lignes Dim listItem As ListViewItem For ligne As Integer = 1 To mon_compte.lignes.Count 'donne le nombre de lignes de mon compte If (Chck_visu_pointage.Checked And Not mon_compte.lignes(ligne - 1).L_pointage) _ Or Not Chck_visu_pointage.Checked Then listItem = New ListViewItem listItem.UseItemStyleForSubItems = False listItem.Text = (mon_compte.lignes.Item(ligne - 1).L_Id) 'index de ligne (GUID) listItem.SubItems.Add(mon_compte.lignes.Item(ligne - 1).L_date.ToString("dd MMMM yy")) listItem.SubItems.Add(mon_compte.lignes.Item(ligne - 1).L_type) listItem.SubItems.Add(mon_compte.lignes.Item(ligne - 1).L_budget) listItem.SubItems.Add(mon_compte.lignes.Item(ligne - 1).L_commentaire) listItem.SubItems.Add(mon_compte.lignes.Item(ligne - 1).L_credit.ToString) listItem.SubItems.Add(mon_compte.lignes.Item(ligne - 1).L_debit.ToString) listItem.SubItems.Add("") ListView1.Items.Add(listItem) ' ajoute les lignes End If Next ligne listItem = Nothing 'détruit les nouvelles lignes en mémoire ListView1.EndUpdate()
If mon_compte.lignes(ligne).L_pointage Then ListView1.Items(ligne).SubItems(7).Text = "X" ' le reste en grisé For i As Integer = 0 To 6 ListView1.Items(ligne).SubItems(i).ForeColor = Color.DarkGray Next i
' lors d'un double clic je pointe ou dépointe la ligne ou si PointerToolStripMenuItem.Click Private Sub ListView1_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles ListView1.DoubleClick ', PointerToolStripMenuItem.Click If ListView1.SelectedItems.Count <> 0 Then Dim index_ligne As Integer = mon_compte.TrouveLaLigne(ListView1.SelectedItems.Item(0).Text) 'récupére le n°ligne du compte via son GUID ' chercher dans ma classe compte la ligne nouvellement pointé If mon_compte.lignes.Item(index_ligne).L_pointage Then mon_compte.lignes.Item(index_ligne).L_pointage = False Else mon_compte.lignes.Item(index_ligne).L_pointage = True End If MiseAjour() ' reload la list view pour mise à jour en fonction de la class mon compte End If End Sub
' lors d'un double clic je pointe ou dépointe la ligne ou si PointerToolStripMenuItem.Click Private Sub ListView1_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles ListView1.DoubleClick ', PointerToolStripMenuItem.Click If ListView1.SelectedItems.Count <> 0 Then 'récupére le n°ligne du compte via son GUID with mon_compte.lignes.Item(mon_compte.TrouveLaLigne(ListView1.SelectedItems.Item(0).Text)) .L_pointage = not .L_pointage end with MiseAjour() ' reload la list view pour mise à jour en fonction de la class mon compte End If End Sub
with mon_compte.lignes.Item(mon_compte.TrouveLaLigne(ListView1.SelectedItems.Item(0).Text)) .L_pointage = not .L_pointage end with