// /// <summary> /// 자기 자신 혹은 하위 레벨에 데이터를 삽입한다. /// </summary> /// <returns>null이 아닐 경우, 해당 데이터를 포함한 노드. NULL일 경우 데이터 삽입 실패.</returns> public Node InsertData(DataT data) { if (!isLeaf) // Leaf 노드가 아닐 경우, Leaf 노드쪽으로 Insert를 시도한다. { return(m_child[0].InsertData(data) ?? m_child[1].InsertData(data)); } else { // Leaf 노드일 경우 if (m_data != null || !m_rect.CanContain(data.width, data.height)) // 이미 데이터가 할당되었거나 데이터 사이즈에 맞지 않는 경우, null 리턴 { return(null); } else if (m_rect.FitsCorrectly(data.width, data.height)) // 딱 맞는 빈 공간일 경우엔 데이터 삽입 후 리턴 { m_data = data; return(this); } else { RectSpace divRect, remainRect; // 사각형을 배치하고 나눴을 때, 어느쪽을 크게 잘라야할지 계산한다. (좀더 큰 공간이 남는 편이 유리하다) int remainw = m_rect.width - data.width; int remainh = m_rect.height - data.height; if (remainw > remainh) // 가로방향을 나눠야함 { m_rect.DivideHorizontally(data.width + m_rect.padding, out divRect, out remainRect); } else { // 세로방향을 나눠야함 m_rect.DivideVertically(data.height + m_rect.padding, out divRect, out remainRect); } m_child[0] = new Node(divRect); m_child[1] = new Node(remainRect); return(m_child[0].InsertData(data)); // 나눈 방향에 대해서 데이터 크기와 맞춘 노드 쪽에 insert 시도 } } }
public void Total(List <DataTable> AgentDatalist) { foreach (DataTable DataT in AgentDataList) { DataRow total = DataT.NewRow(); Decimal TotalMatchAmount1 = 0; decimal TotalCommisionAmount = 0; decimal TotalSessionAmount1 = 0; decimal TotalPlusMinusAmount = 0; decimal Match1Amount = 0; decimal Session1Amount = 0; decimal TotalNetAmount1 = 0; decimal TotalHalfAmount1 = 0; decimal TotalAppAmount1 = 0; decimal TotalSAAmount1 = 0; decimal TotalFinalAmount1 = 0; for (int l = 0; l < DataT.Rows.Count; l++) { decimal MatchAmount = Convert.ToDecimal(DataT.Rows[l]["MatchAmount"]); TotalMatchAmount1 = TotalMatchAmount1 + MatchAmount; decimal SessionAmount = Convert.ToDecimal(DataT.Rows[l]["SessionAmount"]); TotalSessionAmount1 = TotalSessionAmount1 + SessionAmount; decimal TotalAmount = Convert.ToDecimal(DataT.Rows[l]["TotalAmount"]); TotalPlusMinusAmount = TotalPlusMinusAmount + TotalAmount; decimal MatchCommisionAmount = Convert.ToDecimal(DataT.Rows[l]["MatchCommision"]); Match1Amount = Match1Amount + MatchCommisionAmount; decimal MatchSessionAmount = Convert.ToDecimal(DataT.Rows[l]["SessionCommision"]); Session1Amount = Session1Amount + MatchSessionAmount; decimal ToComAmount = Convert.ToDecimal(DataT.Rows[l]["TotalCommisionAmount"]); TotalCommisionAmount = TotalCommisionAmount + ToComAmount; decimal ToNetAmount = Convert.ToDecimal(DataT.Rows[l]["TotalNetAmount"]); TotalNetAmount1 = TotalNetAmount1 + ToNetAmount; decimal ToHalfAmount = Convert.ToDecimal(DataT.Rows[l]["TotalHalfAmount"]); TotalHalfAmount1 = TotalHalfAmount1 + ToHalfAmount; decimal ToAppAmount = Convert.ToDecimal(DataT.Rows[l]["MOBAppAmount"]); TotalAppAmount1 = TotalAppAmount1 + ToAppAmount; decimal ToSAAgentAmount = Convert.ToDecimal(DataT.Rows[l]["SAAgentShare"]); TotalSAAmount1 = TotalSAAmount1 + ToSAAgentAmount; decimal ToFinalAmount = Convert.ToDecimal(DataT.Rows[l]["FinalAmount"]); TotalFinalAmount1 = TotalFinalAmount1 + ToFinalAmount; } total["MatchAmount"] = TotalMatchAmount1; total["SessionAmount"] = TotalSessionAmount1; total["TotalAmount"] = TotalPlusMinusAmount; total["MatchCommision"] = Match1Amount; total["SessionCommision"] = Session1Amount; total["TotalCommisionAmount"] = TotalCommisionAmount; total["TotalNetAmount"] = TotalNetAmount1; total["TotalHalfAmount"] = TotalHalfAmount1; total["MOBAppAmount"] = TotalAppAmount1; total["SAAgentShare"] = TotalSAAmount1; total["FinalAmount"] = TotalFinalAmount1; DataT.Rows.Add(total.ItemArray); } }
/// <summary> /// 정렬 기준값을 계산한다. /// </summary> /// <param name="data"></param> /// <returns></returns> public static int GetWeight(DataT data) { return(Mathf.Max(data.width, data.height)); // 가로/세로 중 큰 축을 정렬 기준으로 삼는다. }
public DataListItem(DataT data) { this.data = data; weight = GetWeight(data); }