DataTable 에서 Group by 할일이 생겼는데, LINQ를 사용할 수 없는 상태였다.
참으로 좋은 시스템을 가지셔서 아직 .NET 2 버젼이기 때문이다. 헐~
아래 함수를 만드신 아주 귀하신 분때문에 문제를 해결할 수 있었다.
private DataTable GetGroupedBy(DataTable dt, string columnNamesInDt, string groupByColumnNames, string typeOfCalculation) { //Return its own if the column names are empty if (columnNamesInDt == string.Empty || groupByColumnNames == string.Empty) { return dt; } //Once the columns are added find the distinct rows and group it bu the numbet DataTable _dt = dt.DefaultView.ToTable(true, groupByColumnNames); //The column names in data table string[] _columnNamesInDt = columnNamesInDt.Split(','); for (int i = 0; i < _columnNamesInDt.Length; i = i + 1) { if (_columnNamesInDt[i] != groupByColumnNames) { _dt.Columns.Add(_columnNamesInDt[i]); } } //Gets the collection and send it back for (int i = 0; i < _dt.Rows.Count; i = i + 1) { for (int j = 0; j < _columnNamesInDt.Length; j = j + 1) { if (_columnNamesInDt[j] != groupByColumnNames) { _dt.Rows[i][j] = dt.Compute(typeOfCalculation + "(" + _columnNamesInDt[j] + ")", groupByColumnNames + " = '" + _dt.Rows[i][groupByColumnNames].ToString() + "'"); } } }
return _dt;
}
아래는 호출부
DataTable dtGroupedBy = GetGroupedBy(dt, "CodeName,Quantity,Current", "CodeName", "Sum");
주의 : 두번째 인자에 공백을 두지 않도록 하자. 컬럼명에 공백이 생긴다.
실제로 테스트 해보고 실전에 사용했더니 잘 된다. 무려 감사드린다. 아래는 원글 주소이다.
// 문제점
모든 데이터가 숫자형이어야 함.(이것때매 많이 수정해야 할 듯)....
https://reachtokiranblog.wordpress.com/2013/08/27/apply-group-by-clause-on-datatable-in-c/
'프로그래밍 > C#' 카테고리의 다른 글
C# 싱글톤 패턴 예제 모음 (2) | 2018.02.21 |
---|---|
C# DataGridView 에서 선택된 DataRow 꺼내기 (0) | 2018.01.11 |
C# 일정 범위 내에 IP 체크하기 (0) | 2017.11.09 |
C# WebBrowser 키이벤트 엔터키 막기 (0) | 2017.09.26 |
C# DataTable에서 특정 컬럼만 Select해서 DataTable 만들기 (0) | 2015.01.18 |
C# 1년전 같은주차 같은요일 날짜 구하기 (0) | 2014.10.23 |
C# OLEDB로 엑셀 읽기 시 문자 또는 숫자가 읽히지 않을 때 (0) | 2014.09.17 |
C# request 인코딩 처리하기 (0) | 2014.02.05 |