2012-03-07 3 views
0

나는 데이터로 채워 datagridview1 열이 : 들어 Booth는, 회의실 2는, 회의실 3가 들어 Booth는, 행의 회의실 3, 또한 일부 데이터는이 같은 그래서 :는 DataGridView에에서 반복되는 항목을 계산하는 방법

Name, Time, Room 
name1, 10, Room1 
name2, 44, Room2 
name3, 1, Room3 
name4, 12, Room1 
................. 

내가 뭘 좋겠 to to는 숫자를 계산하거나 반복하는 것입니다 - Room1 2 배, Room2 2, Room3 2 배 및 누적 시간 값을 추가하는 것입니다. 모든 아이디어를 어떻게 그것을 할 ..

Room | Cumulative_Time 
------------------------- 
Room1 | 22 
Room2 | 44 

그리고 다른 DataGridView에에 추가 :

그래서 같이해야합니까? 데이터 쿼리에서 오는 경우

+0

itemsource (목록 또는 스물)가 무엇인지 게시 할 수 있습니까? 또한. _linq_ an option –

답변

1

... 구문과 함께 당신을 도울 수

public List<Room> GetRooms() 
{ 
    return new List<Room>(){new Room(){Name = "Room1", Time= 10}, 
          new Room(){Name = "Room1", Time= 20}, 
          new Room(){Name = "Room2", Time= 10}, 
          new Room(){Name = "Room2", Time= 30}, 
          new Room(){Name = "Room2", Time= 50}, 
          new Room(){Name = "Room4", Time= 25}, 
          new Room(){Name = "Room3", Time= 50}, 
          new Room(){Name = "Room3", Time= 15}, 
          new Room(){Name = "Room3", Time= 30}, 
          new Room(){Name = "Room3", Time= 40}}; 
} 

[TestMethod] 
public void CheckSumsLambda() 
{ 
    var rooms = GetRooms(); 
    var results = rooms.GroupBy(x => x.Name).Select(x => new { RoomName = x.Key, Occurences = x.Count(), Cumulativetime = x.Sum(y => y.Time) }); 

    Console.WriteLine("Lambda flavour"); 
    foreach (var result in results) 
    {     
     Console.WriteLine("{0}x {1} | {2}", result.Occurences, result.RoomName, result.Cumulativetime);    
    } 

} 

[TestMethod] 
public void CheckSumsLinq() 
{ 
    var rooms = GetRooms(); 
    var results = from r in rooms 
        group r by r.Name 
         into g 
         select new { RoomName = g.Key, Occurences = g.Count(), Cumulativetime = g.Sum(y => y.Time) }; 

    Console.WriteLine("Linq flavour"); 
    foreach (var result in results) 
    { 
     Console.WriteLine("{0}x {1} | {2}", result.Occurences, result.RoomName, result.Cumulativetime); 
    } 

} 

출력 :

lambda version

linq version

+0

놀라운 코드;) Tnx입니다. 이 코드를 내 datagridview 값에 적용하고 누적 시간을 timespan으로 변환해야합니다. 매번 DateTime 변수가 있기 때문입니다. – Elfoc

0

, 당신은 객실 필드로 그룹화, 시간에 SUM 함수를 사용하는 쿼리와 두 번째 그리드를 채울 수

SELECT Room, Sum(Time) from data_table group by Room 

원하지 않는 경우/수 ' t는 Linq에를 사용하여 할 수있는, SQL 쿼리를 사용하지만, 난 당신이 람다 및 LINQ 맛과 함께 할 것입니다 여기에

0

당신이 당신의 데이터 소스로 포항 강판을 사용하는 가정이 문제를 해결해야한다.

// Get data from DataGridView 
var dts = DataGridView.DataSource; 

// Get list of rooms 
var rooms = dts.Select(d=>d.Room).Distinct(); 

// Populate new DataGrid 
NewDataGridView.DataSource = rooms 
.Select(r => new {Room = r, 
Cumulative_Time = dts.Where(d => d.room == r).Select(d => d.time).Sum()}); 
+0

오류가 발생했습니다 : 오류 '개체'에 '선택'에 대한 정의가없고 '개체'유형의 첫 번째 인수를 수락하는 확장 메서드가 없습니다 (사용 지시문이 없거나 어셈블리 참조?) :( – Elfoc

+0

당신은 DataSource로 사용하고있는 무엇이든간에 DataSource를 캐스팅해야합니다. – Tsabo

관련 문제