2010-05-18 3 views
0

У меня есть приложение, которое находится на расписании. У меня есть всего 54 столбца, из которых 10 столбцов являются видимыми остатками невидимыми.Величина удерживания в коллекции

Первые 3 столбца - это Project, MileStone и классы. Отдых - это часы работы Sun-Sat, TaskId, TaskDesc и т. Д. Для каждого дня. На моей сетке видны только первые 3 столбца и часы работы Sun-Sat, остальные невидимы.

Данные колонки от Sun - Sat в базе отсутствуют. Они идентифицируются по дате и отображаются на сетке. Они существуют как строка в базе данных, но отображаются в виде столбца по сетке.

Теперь у меня есть столбцы с именем SunTaskID, MonTaskID и т. Д. До SatTaskID для хранения каждый день taskid [TaskID - это ПК таблицы, из которой извлекаются данные. И каждый имеет свой собственный идентификатор задачи.] Теперь, когда вы выбираете SunHrs (Sunday Work Works), я извлекаю этот taskid дня и на основе идентификатора задачи i затем извлекаю вложения, которые отображаются под списком.

Теперь проблема заключается в том, что в течение дня может быть несколько вложений, и пользователь может прикрепить сразу несколько вложений. Я не могу удерживать вложения.

Например

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 
| 
| 
|____________________ 

Say выше моя сетка и ниже сетки, привязанность, его ListBox для хранения вложений. _ - это текущее местоположение курсора, которое находится в WedHrs со значением 10 [вторая строка].

Я использую BindingList (TaskClass) в VB.Net для привязки сетки. У меня есть 54 свойства n мой класс задачи. У меня есть только 10 столбцов видимых остатков невидимых, значения которых извлекаются программно.

Текущая ячейка имеет вложение abc.txt и def.pdf. Проблема в том, что перед сохранением мне нужно прикреплять вложения к нескольким ячейкам. Но я не могу удержаться. У меня есть моя модель задачи, имеющая все свойства для сетки. Затем я сохраняю итерирует коллекцию и извлекает значения для каждого требуемого элемента.

Но для вложений здесь мне нужно какое-то свойство коллекции в классе taskmodel для хранения вложений для всех дней подряд.

Раньше я пробовал словарь. Но я не знал о его использовании в качестве свойства, которое я дал. Затем подготовил отдельный класс для крепления, но это было трудно синхронизировать существующие вложения с TaskId ...

Я надеюсь, что теперь вопрос будет ясно

+0

Его до сих пор не ясно, что вы пытаетесь достичь. Какие данные должен хранить коллекция/словарь, каков будет ключ? День, пользователь или ваш TaskID? И ценность будет сборка вложений или другого Словаря (UserAttachments?)? –

ответ

1

Надеюсь, теперь я почти понял, чего вы хотите достичь. Было бы полезно для вас знать задачи (приложения) на любой день? Кроме того, возможно ли пользователям добавлять/удалять вложения task-indepent/task-complete для особого дня? Если это не так, и ответ на первый вопрос - да (в противном случае он, надеюсь, вернет вас обратно): При загрузке задач из базы данных и инициализации объектов TaskClass-объектов вы можете добавить эти объекты в общий словарь в вашем TaskClass, который дата и значение - это список задач.

Пример:

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

Спасибо, ты был близок, но не то, что я ожидаю. В любом случае для решений. Это помогло мне в некоторых других аспектах. Занятый одним и тем же материалом добавит несколько подробностей относительно запроса позже ... –

0

Я не уверен, что я понимаю ваш вопрос, но по крайней мере, часть его, кажется, просит коллекцию для хранения вложений. Я бы предложил просто иметь словарь с идентификатором taskID в качестве ключа и списка в качестве значения, и поэтому вы можете связать несколько вложений с одним идентификатором taskID.

Dim attachments As Dictionary(Of Int32, List(Of Object)) 
Смежные вопросы