2010-05-18 5 views
0

J'ai une application qui est sur la feuille de temps. J'ai un total de 54 colonnes dont 10 colonnes sont visibles restent invisibles.Valeur résiduelle dans la collection

Les 3 premières colonnes sont Project, MileStone et Classes. Repos sont les heures de travail Sun-Sat, TaskId, TaskDesc et ainsi de suite pour chaque jour. Sur ma grille seulement les 3 premières colonnes et les heures de travail Sun-Sat sont visibles, les repos sont invisibles.

Ces colonnes de Sun-Sat n'existent pas dans la base de données. Ils sont identifiés sur la base de la date et affichés sur la grille. Ils existent en tant que ligne dans la base de données mais affichés en tant que colonne sur la grille.

Maintenant j'ai des colonnes nommées SunTaskID, MonTaskID et ainsi de suite jusqu'à SatTaskID pour contenir chaque jour taskid [TaskID est le PK de la table à partir de laquelle les données sont retirées. Et chacun a son propre id de tâche.] Maintenant, sur la sélection de SunHrs (dimanche de travail heures), je récupère ce jour taskid et sur la base de l'ID de tâche, puis récupérer les pièces jointes qui est affiché sous une liste.

Maintenant, le problème est que depuis un jour peut avoir plusieurs pièces jointes et un utilisateur peut attacher plusieurs pièces jointes à la fois. Je ne suis pas capable de tenir les pièces jointes.

Par exemple

Project | Milestone | Class | Sunhrs | Monhrs | TueHrs | WedHrs | ThuHrs | FriHrs | satHrs 

abc - xyz |sa  | nyz | 11.00 | 6.00  | 0  | 0  |1  |1  | 0 

abc - xyz |sa  | dasdds| 1.00 | 9.00  | 16 | 10 _  |11  |11  | 10 

Attachments 
--------------------- 
| 
| abc.txt 
| def.pdf 
| 
| 
|____________________ 

Dites ci-dessus est ma grille et au-dessous grille, est l'attachement, son ListBox pour tenir les pièces jointes. _ est ma position actuelle du curseur qui est à WedHrs ayant la valeur 10 [deuxième rangée]. J'utilise BindingList (de TaskClass) dans VB.Net pour la grille de liaison. J'ai au total 54 propriétés dans ma classe de tâches. Je n'ai que 10 colonnes visibles invisibles dont les valeurs sont récupérées par programme.

La cellule actuelle contient la pièce jointe abc.txt et def.pdf. Le problème est que je dois joindre des pièces jointes à plusieurs cellules avant de les sauvegarder. Mais je ne suis pas capable de tenir. J'ai mon modèle de tâche ayant toutes les propriétés pour la grille. Je sauvegarde ensuite itère la collection et récupère les valeurs pour chaque élément requis.

Mais pour les pièces jointes, j'ai besoin d'une sorte de propriété de collection dans ma classe taskmodel pour contenir des pièces jointes pour tous les jours d'une rangée.

Plus tôt, j'ai essayé Dictionary. Mais je n'étais pas au courant de son utilisation en tant que propriété, alors j'ai donné. Ensuite, préparé une classe séparée pour la fixation, mais il était difficile de synchroniser les pièces jointes existantes avec taskid ...

J'espère maintenant la question sera claire

+0

Son toujours pas clairement ce que vous essayez d'atteindre. Quelles sont les données que devrait contenir la collection/le dictionnaire, quelle serait la clé? Le jour, l'utilisateur ou votre TaskID? Et la valeur serait une collection de pièces jointes ou un autre dictionnaire (UserAttachments?)? –

Répondre

1

J'espère avoir maintenant presque compris ce que vous voulez accomplir. Serait-il utile pour vous connaître les tâches (pièces jointes) pour un jour? De même, est-il possible pour les utilisateurs d'ajouter/supprimer des pièces jointes tâche-indépendante/tâche-complète pour un jour spécial? Si ce n'est pas le cas et que la réponse à la première question est oui (sinon nous espérons vous remettre sur la bonne voie): Lors du chargement des tâches depuis la base de données et l'initialisation de vos objets TaskClass, vous pouvez ajouter ces objets à un dictionnaire partagé dans votre TaskClass. est la date et la valeur est une liste de tâches.

Un exemple:

Private Sub loadForm(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
     Task.loadData("only for test case") 

     Dim testDate As Date = New Date(2010, 5, 19) 'today, wednesday as in your example 
     'now i want all tasks and attachments for this day 
     If Task.allDayTasks.ContainsKey(testDate) Then 
      Dim allTasksForThisDay As List(Of Task) = Task.allDayTasks(testDate) 
      Dim allAttachmentsForThisDay As New List(Of Task.TaskAttachment) 
      For Each task As Task In allTasksForThisDay 
       For Each attachment As Task.TaskAttachment In task.allAttachments 
        allAttachmentsForThisDay.Add(attachment) 
       Next 
      Next 

      For Each attachment As Task.TaskAttachment In allAttachmentsForThisDay 
       Console.WriteLine(attachment.file) 
      Next 
     End If 
    End Sub 

    Class Task 
     Public Shared allDayTasks As New Dictionary(Of Date, List(Of Task)) 
     Public taskID As String 
     Public allAttachments As New List(Of TaskAttachment) 
     Public begin As Date 
     Public duration As Int32 'f.e. hours 

     Shared Function loadData(ByVal taskID As String) As Task 
      'Do your database stuff to get the Task and its attachments 
      Dim newTask As New Task 
      newTask.taskID = taskID 
      newTask.begin = New Date(2010, 5, 19) 
      newTask.duration = 10 
      '........... 
      newTask.allAttachments.Add(New TaskAttachment("abc.txt")) 
      newTask.allAttachments.Add(New TaskAttachment("def.pdf")) 

      If allDayTasks.ContainsKey(newTask.begin) Then 
       'Equals overridden to use contains and indexof 
       If allDayTasks(newTask.begin).Contains(newTask) Then 
        Dim taskIndex As Int32 = allDayTasks(newTask.begin).IndexOf(newTask) 
        allDayTasks(newTask.begin)(taskIndex) = newTask 
       Else 
        allDayTasks(newTask.begin).Add(newTask) 
       End If 
      Else 
       Dim dayTasks As New List(Of Task) 
       dayTasks.Add(newTask) 
       allDayTasks.Add(newTask.begin, dayTasks) 
      End If 

      Return newTask 
     End Function 

     Public Overrides Function Equals(ByVal obj As Object) As Boolean 
      If obj Is Nothing Then 
       Return False 
      Else 
       Return Me.ToString.Equals(obj.ToString) 
      End If 
     End Function 

     Public Overrides Function ToString() As String 
      Return Me.taskID.ToString() 
     End Function 

     Class TaskAttachment 
      Sub New(ByVal file As String) 
       Me.file = file 
      End Sub 
      Public file As String 
     End Class 
    End Class 
+0

Merci Tim, vous étiez proche mais pas ce que je m'attends. En tout cas 1 pour les solutions. Cela m'a aidé dans d'autres aspects. Occupé avec la même chose mettra plus de détails concernant la requête après ... –

0

Je ne suis pas sûr que je comprends votre question, mais au moins une partie semble demander une collection pour stocker les pièces jointes. Je suggérerais juste d'avoir un dictionnaire avec le taskID comme clé et une liste comme valeur et ainsi vous pouvez lier plusieurs pièces jointes à un ID de tâche.

Dim attachments As Dictionary(Of Int32, List(Of Object)) 
Questions connexes