2010-05-18 9 views
0

나는 출퇴근 시간 기록 용지에있는 신청서를 가지고 있습니다. 총 10 개의 열이 보이지 않는 나머지 54 개의 열이 있습니다.콜렉션 보유 가치 :

첫 번째 3 열은 프로젝트, 마일스톤 및 클래스입니다. 나머지는 매일 근무 시간, TaskId, TaskDesc 등입니다. 내 그리드에서는 처음 3 열과 Sun - 토 작업 시간 만 표시되며 나머지는 표시되지 않습니다.

Sun-Sat의 이러한 열은 데이터베이스에 없습니다. 날짜를 기준으로 식별되고 표에 표시됩니다. 데이터베이스에 행으로 존재하지만 격자 위에 열로 표시됩니다.

이제 SunTaskID, MonTaskID 등의 열이 있는데, 각 Taskid를 보유하기위한 SatTaskID까지 [TaskID는 데이터를 꺼내는 테이블의 PK입니다. 각각 SunHrs (일요일 근무 시간)를 선택하면 그 날 taskid를 검색하고 작업 ID를 기준으로 목록 상자 아래에 표시된 첨부 파일을 검색합니다.

이제 하루는 여러 첨부 파일을 가질 수 있으며 사용자는 여러 첨부 파일을 한 번에 첨부 할 수 있습니다. 첨부 파일을 보관할 수 없습니다.

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

예를

를 들어

내 그리드는 그리드 아래 첨부 파일을 보유 할 그 목록 상자, 첨부 파일입니다 위의 말. _는 값 10 [두 번째 행]을 가진 WedHrs에있는 현재 커서 위치입니다.

저는 바인딩 그리드 용 VB.Net에서 BindingList (TaskClass)를 사용하고 있습니다. 나는 총 54 개의 속성을 가지고있다. 나는 그 열의 값이 프로그램 적으로 검색되는 10 개의 열 밖에 보이지 않는 나머지를 볼 수있다.

현재 셀에는 abc.txt 및 def.pdf가 첨부됩니다. 문제는 저장하기 전에 첨부 파일을 여러 셀에 첨부해야한다는 것입니다. 그러나 나는 붙들 수 없다. 내가 그리드에 대한 모든 속성을 가지고 내 작업 모델을했습니다. 그런 다음 save를 사용하여 컬렉션을 반복하고 각 필수 항목의 값을 검색합니다.

여기 첨부 파일을 보려면 모든 일간 첨부 파일을 보관하기 위해 taskmodel 클래스의 일종의 컬렉션 속성이 필요합니다.

이전에 나는 사전을 시도했다. 그러나 나는 재산으로 그것의 사용법을 알고 있었다 그래서 나는 주었다. 그런 다음 첨부 파일에 대해 별도의 클래스를 준비하지만, TASKID와 기존의 첨부 파일을 동기화하기가 어렵습니다 ...

내가 문제가 내가 당신의 질문을 이해 모르겠어요 분명

+0

그 여전히 당신이 달성 하려는지 명확하지. 콜렉션/딕셔너리가 보유해야하는 데이터는 무엇이며, 키는 무엇입니까? 그 날, 사용자 또는 귀하의 TaskID? 그리고 그 가치는 첨부물 또는 다른 사전 (UserAttachments?)의 모음일까요? –

답변

1

나는 당신이 달성하기를 원하는 것을 거의 이해했기를 바랍니다. 의 작업 (첨부 파일)을 님에게 알리는 것이 도움이 되겠습니까? 또한 사용자가 특별한 날에 작업 독립/작업 포괄적 인 첨부 파일을 추가/제거 할 수 있습니까? 그렇지 않은 경우 첫 번째 질문에 대한 대답이 '예'입니다 (그렇지 않으면 다시 정상적으로 돌아옵니다) : 데이터베이스에서 작업을로드하고 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

감사의 말, 나는 가까이에 있었지만 내가 기대하는 바가 아니었다. 어쨌든 해결책은 1입니다. 다른 측면에서 도움이되었습니다. 동일한 항목을 사용 중일 때 쿼리에 대한 세부 정보를 나중에 추가합니다. –

0

될 것입니다 지금은 좋겠지 만 적어도 그것의 일부는 첨부 파일을 저장할 컬렉션을 요청하는 것 같습니다. 저는 taskID가있는 키를 가진 사전과 값을 가진리스트를 제안하고 하나의 taskID에 여러 개의 첨부 파일을 연결할 수 있습니다.

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