[Server Side] Footer의 값을 이용하여 Footer 계산
// Footer 만들기 위해 컬럼 배열로...
private void Footer(UltraWebGrid grid, DataTable datatable, string columns, string titleColumn)
{
GridFooterTotal(grid, datatable, columns.Split(','), titleColumn); // 배열로 만든 컬럼으로 Total 함수 호출
}
// 최종 Footer 생성 (footer 계산)
private void GridFooterTotal(UltraWebGrid grid, DataTable datatable, string[] columns, string titleColumn)
{
grid.DisplayLayout.ColFootersVisibleDefault = ShowMarginInfo.Yes;
grid.DisplayLayout.StationaryMargins = StationaryMargins.HeaderAndFooter;
foreach (string columnName in columns)
{
UltraGridColumn column = grid.Columns.FromKey(columnName.Trim());
column.Footer.Style.HorizontalAlign = HorizontalAlign.Right;
column.Footer.Style.Padding.Right = 2;
if (columnName == "rate")
{
string totalpqty = grid.Columns.FromKey("pqty").Footer.Caption.Replace(",", "");
string totalrqty = grid.Columns.FromKey("rqty").Footer.Caption.Replace(",", "");
decimal rate = (NullCheck(totalrqty) / NullCheck(totalpqty)) * 100;
column.Footer.Caption = rate.ToString("###,###,###,###.##");
}
else if (columnName == "monrate")
{
string totalpamt = grid.Columns.FromKey("pamt").Footer.Caption.Replace(",", "");
string totalramt = grid.Columns.FromKey("ramt").Footer.Caption.Replace(",", "");
decimal monrate = (NullCheck(totalpamt) / NullCheck(totalramt)) * 100;
column.Footer.Caption = monrate.ToString("###,###,###,###.##");
}
else
{
column.Footer.Caption = datatable.AsEnumerable().Sum(r => NullCheck(r[columnName.Trim()])).ToString("###,###,###,###.##");
}
}
if (string.IsNullOrEmpty(titleColumn))
{
grid.Columns[0].Footer.Caption = CM.TotalText;
}
else
{
grid.Columns[0].Footer.Caption = "";
grid.Columns.FromKey(titleColumn).Footer.Caption = CM.TotalText;
}
}
// null 체크 (decimal로 변경시 공백으로 들어갈 경우 convert가 되지 않으며 error가 나므로 0으로 변경한다.)
public static decimal NullCheck(object d)
{
if (d == null || d == DBNull.Value || string.IsNullOrEmpty(d.ToString()))
return 0;
return Convert.ToDecimal(d);
}
이거 땜에 몇일 고생했는데... 이긍.. null값 때문일 줄이야... 잊어먹지는 않겠군,,,