private DataTable GetMengurusDataTable()
        {
            DataTable dt = new DataTable();

            try
            {
                List <AccountCodeTreeHelper> accountcodes = CreateExportData();
                List <PeriodMenguru>         PeriodData   = (List <PeriodMenguru>)Session["PeriodData"];
                List <BudgetMenguru>         BudgetData   = ((List <BudgetMenguru>)Session["BudgetData"]).Where(x => x.Status == "A").ToList();

                //Start Build DataTable
                DataColumn dc = new DataColumn("AccountCode");
                dt.Columns.Add(dc);
                dc = new DataColumn("Objeck");
                dt.Columns.Add(dc);
                dc = new DataColumn("Description");
                dt.Columns.Add(dc);
                if (chkKeterangan.Checked)
                {
                    dc = new DataColumn("Keterangan");
                    dt.Columns.Add(dc);
                }
                if (chkPengiraan.Checked)
                {
                    dc = new DataColumn("Pengiraan");
                    dt.Columns.Add(dc);
                }
                foreach (PeriodMenguru pm in PeriodData)
                {
                    int    count   = dt.Columns.Cast <DataColumn>().Where(x => x.ColumnName == pm.MengurusYear.ToString() + "_" + pm.FieldMenguru.FieldMengurusDesc).Count();
                    string colname = pm.MengurusYear.ToString() + "_" + pm.FieldMenguru.FieldMengurusDesc;
                    colname = (count == 0) ? colname : colname + "_" + (count + 1).ToString();
                    dc      = new DataColumn(colname);
                    dt.Columns.Add(dc);
                }
                //End Build DataTable

                //Start pushing data into DataTable
                foreach (AccountCodeTreeHelper acchelp in accountcodes)
                {
                    int     c  = 0;
                    DataRow dr = dt.NewRow();

                    dr[c] = new Helper().GetLevelString(acchelp.AccountCode, acchelp.Level);
                    c++;
                    dr[c] = Session["PrefixAcountCode"].ToString() + acchelp.AccountCode;
                    c++;
                    dr[c] = acchelp.AccountDesc;
                    if (chkKeterangan.Checked)
                    {
                        c++;
                        dr[c] = acchelp.Keterangan;
                    }
                    if (chkPengiraan.Checked)
                    {
                        c++;
                        dr[c] = acchelp.Pengiraan;
                    }

                    foreach (PeriodMenguru pm in PeriodData)
                    {
                        BudgetMenguru ObjBudgetMenguru = BudgetData.Where(x => x.AccountCode == acchelp.AccountCode && x.PeriodMengurusID == pm.PeriodMengurusID).FirstOrDefault();
                        decimal       amount           = Convert.ToDecimal(0);
                        if (acchelp.ChildCount == 0)
                        {
                            amount = (ObjBudgetMenguru != null) ? ObjBudgetMenguru.Amount : Convert.ToDecimal(0);
                        }
                        else
                        {
                            List <string> ChildIDs = new List <string>()
                            {
                                acchelp.AccountCode
                            };
                            List <string> RefChildIDs = new List <string>();
                            while (ChildIDs.Count > 0)
                            {
                                RefChildIDs.Clear();
                                foreach (AccountCodeTreeHelper t in accountcodes.Where(x => ChildIDs.Contains(x.AccountCode)))
                                {
                                    amount = amount + BudgetData.Where(x => x.AccountCode == t.AccountCode && x.PeriodMengurusID == pm.PeriodMengurusID).Select(x => x.Amount).Sum();
                                    foreach (string s in accountcodes.Where(x => x.ParentAccountCode == t.AccountCode).Select(x => x.AccountCode).ToList())
                                    {
                                        RefChildIDs.Add(s);
                                    }
                                }
                                ChildIDs.Clear();
                                foreach (string s in RefChildIDs)
                                {
                                    ChildIDs.Add(s);
                                }
                            }
                        }

                        c++;
                        dr[c] = amount.ToString("F");
                    }
                    dt.Rows.Add(dr);
                }
                //End pushing data into DataTable
            }
            catch (Exception ex)
            {
                ((SiteMaster)this.Master).ShowMessage("Error", "An error occurred", ex, true);
            }
            return(dt);
        }
        protected void gvAccountCodes_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            try
            {
                if (e.Row.RowType == DataControlRowType.DataRow)
                {
                    List <string>                SelectedNodes    = (List <string>)Session["SelectedNodes"];
                    List <BudgetMenguru>         BudgetData       = (List <BudgetMenguru>)Session["BudgetData"];
                    List <AccountCodeTreeHelper> TreeData         = (List <AccountCodeTreeHelper>)Session["AccountCodesTree"];
                    List <AccountCode>           AccountCodesData = (List <AccountCode>)Session["AccountCodesData"];
                    List <PeriodMenguru>         PeriodData       = (List <PeriodMenguru>)Session["PeriodData"];

                    AccountCodeTreeHelper rowItem = (AccountCodeTreeHelper)e.Row.DataItem;

                    /*Start Account Code logics*/
                    int width = rowItem.Level * (new Helper().IndentPixels);

                    string strHTML = string.Empty;
                    if (rowItem.ChildCount > 0)
                    {
                        if (SelectedNodes.Contains(rowItem.AccountCode))
                        {
                            strHTML = "<label style=\"display: inline-block;width:" + (width + 10).ToString() + "px;vertical-align:middle;\"><i class=\"ace-icon fa fa-minus-square pull-right\"></i></label> ";
                        }
                        else
                        {
                            strHTML = "<label style=\"display: inline-block;width:" + (width + 10).ToString() + "px;vertical-align:middle;\"><i class=\"ace-icon fa fa-plus-square pull-right\"></i></label> ";
                        }
                    }
                    else
                    {
                        strHTML = "<label style=\"display: inline-block;width:" + (width + 10).ToString() + "px;vertical-align:middle;\"><i></i></label> ";
                    }

                    LinkButton btnExpand = ((LinkButton)e.Row.Cells[0].FindControl("btnExpand"));
                    //btnExpand.Text = "<div style=\"max-width:200px;overflow:hidden;white-space:nowrap;\">" + strHTML + Session["PrefixAcountCode"].ToString() + rowItem.AccountCode + "</div>";
                    btnExpand.Text    = "<div style=\"max-width:200px;overflow:hidden;white-space:nowrap;\">" + strHTML + rowItem.AccountCode + "</div>";
                    btnExpand.ToolTip = rowItem.AccountDesc;

                    //if (Session["SelectedAccountCode"] != null && ((AccountCode)Session["SelectedAccountCode"]).AccountCode1 == rowItem.AccountCode)
                    //{
                    //    e.Row.Style["background-color"] = "skyblue";
                    //}
                    //if (SelectedNodes.Contains(rowItem.AccountCode))
                    //{
                    //    e.Row.Style["background-color"] = "skyblue";
                    //}
                    /*End Account Code logics*/

                    /*Start Buget logics*/
                    int index = 2;
                    if (chkKeterangan.Checked)
                    {
                        index++;
                    }
                    if (chkPengiraan.Checked)
                    {
                        index++;
                    }

                    bool IsBudgetEditable = Convert.ToBoolean(Session["CanEdit"]);
                    for (int c = index; c < gvAccountCodes.Columns.Count; c++)
                    {
                        //int PeriodMenguruID = Convert.ToInt32(((Label)e.Row.Cells[c].FindControl("lbl_PeriodMenguruID")).Text);
                        int           PeriodMenguruID = Convert.ToInt32(((Label)e.Row.Cells[c].Controls[0]).Text);
                        PeriodMenguru pm = PeriodData.Where(x => x.PeriodMengurusID == PeriodMenguruID).FirstOrDefault();
                        BudgetMenguru ObjBudgetMenguru = BudgetData.Where(x => x.AccountCode == rowItem.AccountCode && x.PeriodMengurusID == PeriodMenguruID).FirstOrDefault();

                        Label      lbl         = ((Label)e.Row.Cells[c].FindControl("lbl_" + PeriodMenguruID));
                        LinkButton btnSaved    = ((LinkButton)e.Row.Cells[c].FindControl("btnSaved_" + PeriodMenguruID));
                        LinkButton btnPrepared = ((LinkButton)e.Row.Cells[c].FindControl("btnPrepared_" + PeriodMenguruID));
                        LinkButton btnReviewed = ((LinkButton)e.Row.Cells[c].FindControl("btnReviewed_" + PeriodMenguruID));
                        LinkButton btnApproved = ((LinkButton)e.Row.Cells[c].FindControl("btnApproved_" + PeriodMenguruID));
                        LinkButton btnRevRej   = ((LinkButton)e.Row.Cells[c].FindControl("btnRevRej_" + PeriodMenguruID));
                        LinkButton btnAprRej   = ((LinkButton)e.Row.Cells[c].FindControl("btnAprRej_" + PeriodMenguruID));

                        lbl.Visible         = true;
                        btnSaved.Visible    = false;
                        btnPrepared.Visible = false;
                        btnReviewed.Visible = false;
                        btnApproved.Visible = false;
                        btnRevRej.Visible   = false;
                        btnAprRej.Visible   = false;

                        e.Row.Cells[c].BackColor = ((ObjBudgetMenguru != null) ? new Helper().GetColorByStatusValue('A') : new System.Drawing.Color());

                        if (rowItem.ChildCount == 0)
                        {
                            lbl.Text = (ObjBudgetMenguru != null) ? ObjBudgetMenguru.Amount.ToString() : string.Empty;
                        }
                        else
                        {
                            decimal amount = 0;

                            List <string> ChildIDs = new List <string>()
                            {
                                rowItem.AccountCode
                            };
                            List <string> RefChildIDs = new List <string>();
                            while (ChildIDs.Count > 0)
                            {
                                RefChildIDs.Clear();
                                foreach (AccountCode t in AccountCodesData.Where(x => ChildIDs.Contains(x.AccountCode1)))
                                {
                                    amount = amount + BudgetData.Where(x => x.AccountCode == t.AccountCode1 && x.PeriodMengurusID == PeriodMenguruID).Select(x => x.Amount).Sum();
                                    foreach (string s in AccountCodesData.Where(x => x.ParentAccountCode == t.AccountCode1).Select(x => x.AccountCode1).ToList())
                                    {
                                        RefChildIDs.Add(s);
                                    }
                                }
                                ChildIDs.Clear();
                                foreach (string s in RefChildIDs)
                                {
                                    ChildIDs.Add(s);
                                }
                            }

                            lbl.Text = (amount != 0) ? amount.ToString("F") : string.Empty;
                        }
                    }
                    /*End Buget logics*/
                }
            }
            catch (Exception ex)
            {
                ((SiteMaster)this.Master).ShowMessage("Error", "An error occurred", ex, true);
            }
        }