2011-10-31 1 views
0

나는 CSV를로드하고 세 개의 열이있는 데이터를 수집 내의 WinForm의 GUI에 DataGridView에 있습니다C#의 DataGridView에 수학 연산은 다음 목록에 데이터를 전달

FILE_ID, 세부 사항, 엔드 라인
0, sometext, 1
을 0 sometext 3
0 sometext 5
1 sometext 9
1 sometext 16
1 sometext 23
2 sometext 25
2 sometext 27 01, 2, sometext, 28
2, sometext,

30 내가이있는 gridview 내가 이런 걸 할 수 있도록 목록 로 번역 할 :

pList.Add (새 FileExtract을 (1 , 1, 148165));
pList.Add (new FileExtract (2, 148165, 166926));

아니라 추가 hardcording보다 루프 (새 FileExtract을 ...)

이 목록은 같은 것을 보일 것입니다 : 6, 5
2,
ID, 시작, 종료
1, 0, 23
3, 24, 30

참고한다 :
는 - 제 라인 : ID = 1 시작 = 0
- ID = 1 FILE_ID에 대향ID로 생각 관한 - 53,210 ID 2에 시작, ID 1 플러스 1의 끝, ID에 ID 2의 3 = 끝 플러스 작동

비트를 시작할 수 있습니다 :

   var filesplitc = from p in ListBoxEdit1 
          group p by p.file_id into grp 
          let MaxP = grp.Max(g => g.RunningTotal) 
          from p in grp 
          where p.RunningTotal == MaxP 
          select p; 

      var filesplitc1 = from p in filesplitc 
           select new { file_id = p.file_id, startingline = (p.file_id == 0) ? "0" : "", endingline = p.RunningTotal }; 

작동하지 않습니다 비트 :

  var filesplitc2 = from p in filesplitc1 
           select new { 
            file_id = p.file_id, 
            startingline = p.startingline == "" ? ((from x in filesplitc1 where (Convert.ToInt32(x.file_id) <= Convert.ToInt32(p.file_id)) select x.endingline).Last()) : p.startingline, 
            endingline = p.endingline 
           }; 
+0

어쩌면 당신은 당신이 지금까지 시도한 것과 당신이 그것에 갇혀있는 곳의 코드를 보여줄 수 있습니다. – ChrisWue

+0

@ChrisWue 편집 됨. –

+0

작동하지 않는 비트를 말하면 잘못된 결과가 나오거나 심지어 컴파일되지 않는다는 뜻입니까? 시작 라인을 지정하는 IIF 코드 라인은 다른 대괄호 세트와 유사하게 보입니다. –

답변

0

목록 상자에 어떤 데이터 구조를 넣었는지 잘 모르기 때문에 조정해야 할 수도 있지만 아이디어를 제공해야합니다. 그것은 Linq 아니지만 Linq 쿼리에 모든 스쿼시가 가독성과 코드 유지 보수를 반드시 도움이되지 않습니다.

class FileExtract 
{ 
    public int FileId { get; set; } 
    public int Start { get; set; } 
    public int End { get; set; } 
} 


var fileExtracts = new List<FileExtract>(); 
// take first entry as initializer 
var current = new FileExtract 
       { 
        FileId = ListBoxEdit1.First().file_id, 
        Start = 0, 
        End = ListBoxEdit1.First().end_line 
       }; 
int lastEnd = current.End; 
// skip first entry of the list as it was already used as initializer 
foreach (var p in ListBoxEdit1.Skip()) 
{ 
    if (current.FileId != p.file_id) 
    { 
     current.End = lastEnd; 
     fileExtract.Add(current); 
     current = new FileExtract { FileId = p.file_id, Start = lastEnd + 1, End = p.end_line };   
    } 
    lastEnd = p.end_line; 
} 
관련 문제