private void us_object2grid(US_RPT_BO_NHIEM i_us
                                    , int i_grid_row)
        {
            DataRow v_dr = (DataRow)m_fg.Rows[i_grid_row].UserData;

            i_us.Me2DataRow(v_dr);
            m_obj_trans.DataRow2GridRow(v_dr, i_grid_row);
        }
        private void grid2us_object(US_RPT_BO_NHIEM i_us
                                    , int i_grid_row)
        {
            DataRow v_dr;

            v_dr = (DataRow)m_fg.Rows[i_grid_row].UserData;
            m_obj_trans.GridRow2DataRow(i_grid_row, v_dr);
            i_us.DataRow2Me(v_dr);
        }
        private void load_data_2_grid()
        {
            US_RPT_BO_NHIEM m_v_us = new US_RPT_BO_NHIEM();

            m_ds = new DS_RPT_BO_NHIEM();
            var v_str_search = m_txt_tim_kiem.Text.Trim();

            //var v_str_search = "TEG";
            //if (m_txt_search.Text.Trim() != m_str_goi_y_tim_kiem)
            m_v_us.FillDatasetByProc(m_ds, v_str_search, m_dtp_tu_ngay.Value.Date, m_dtp_den_ngay.Value.Date, (decimal)m_cbo_quyet_dinh.SelectedValue, CAppContext_201.getCurrentIDPhapnhan());
            //else
            //{
            //m_v_us.FillDatasetByKeyWord(m_v_ds, "", CIPConvert.ToDecimal(m_cbo_loaidv.SelectedValue), CIPConvert.ToDecimal(m_cbo_capdv.SelectedValue), m_cbo_trangthai.SelectedValue.ToString(), CAppContext_201.getCurrentIDPhapnhan());
            //}
            m_fg.Redraw = false;
            int minID_LEVEL = int.Parse(m_ds.RPT_BO_NHIEM.Compute("Min(ID_LEVEL)", "").ToString());

            DataRow[] v_arr_dr = m_ds.RPT_BO_NHIEM.Select(RPT_BO_NHIEM.ID_LEVEL + "=" + minID_LEVEL.ToString());
            if (v_arr_dr.Length == 0)
            {
                return;
            }
            CGridUtils.ClearDataInGrid(m_fg);
            m_v_us.DataRow2Me(v_arr_dr[0]);
            m_fg.Rows.Count += 1;
            int v_i_root_row = m_fg.Rows.Count - 1;

            us_object_2_grid(m_v_us, m_ds, v_i_root_row);
            m_fg.Rows[v_i_root_row].IsNode     = true;
            m_fg.Rows[v_i_root_row].Node.Level = int.Parse(m_v_us.dcID_LEVEL.ToString());
            switch (m_fg.Rows[v_i_root_row].Node.Level)
            {
            case 0:
                m_fg.Rows[v_i_root_row].Style = m_fg.Styles[CellStyleEnum.Subtotal0];
                break;

            case 1:
                m_fg.Rows[v_i_root_row].Style = m_fg.Styles[CellStyleEnum.Subtotal1];
                break;

            case 2:
                m_fg.Rows[v_i_root_row].Style = m_fg.Styles[CellStyleEnum.Subtotal2];
                break;

            case 3:
                m_fg.Rows[v_i_root_row].Style = m_fg.Styles[CellStyleEnum.Subtotal3];
                break;
            }
            insert_all_child_of_node(v_i_root_row, m_ds);
            //load_custom_source_2_m_txt_tim_kiem();
            m_fg.Redraw = true;
            //set_search_format_before();
            /*Đếm số dòng dữ liệu trên Grid*/
            //m_lbl_so_luong_ban_ghi.Text = m_ds.RPT_BO_NHIEM.Count.ToString();
        }
        private void us_object_2_grid(US_RPT_BO_NHIEM i_us_object, DataSet i_ds
                                      , int i_grid_row)
        {
            if (m_fg.Rows[i_grid_row].UserData == null)
            {
                m_fg.Rows[i_grid_row].UserData = i_ds.Tables[0].NewRow();
            }
            DataRow v_dr = (DataRow)m_fg.Rows[i_grid_row].UserData;

            i_us_object.Me2DataRow(v_dr);
            m_obj_trans.DataRow2GridRow(v_dr, i_grid_row);
        }
        private void insert_child_node(US_RPT_BO_NHIEM i_us_object
                                       , DataSet i_ds
                                       , int i_parent_row
                                       , ref int i_row_result
                                       )
        {
            int v_i_new_grid_row;
            //Lay nut hien tai
            Node v_current_node = m_fg.Rows[i_parent_row].Node;
            Node v_node_4_index;
            int  v_i_level;

            //Neu them kieu nut la sibling cua nut hien tai
            v_node_4_index = v_current_node;
            v_i_level      = int.Parse(i_us_object.dcID_LEVEL.ToString());
            Node v_last_child = v_node_4_index.GetNode(NodeTypeEnum.LastChild);

            while (v_last_child != null)
            {
                v_node_4_index = v_last_child;
                v_last_child   = v_node_4_index.GetNode(NodeTypeEnum.LastChild);
            }
            v_i_new_grid_row = v_node_4_index.Row.Index + 1;
            m_fg.Rows.Insert(v_i_new_grid_row);
            us_object_2_grid(i_us_object, i_ds, v_i_new_grid_row);
            m_fg.Rows[v_i_new_grid_row].IsNode     = true;
            m_fg.Rows[v_i_new_grid_row].Node.Level = v_i_level;

            switch (v_i_level)
            {
            case 0:
                m_fg.Rows[v_i_new_grid_row].Style = m_fg.Styles[CellStyleEnum.Subtotal0];
                break;

            case 1:
                m_fg.Rows[v_i_new_grid_row].Style = m_fg.Styles[CellStyleEnum.Subtotal1];
                break;

            case 2:
                m_fg.Rows[v_i_new_grid_row].Style = m_fg.Styles[CellStyleEnum.Subtotal2];
                break;

            case 3:
                m_fg.Rows[v_i_new_grid_row].Style = m_fg.Styles[CellStyleEnum.Subtotal3];
                break;
            }

            i_row_result = v_i_new_grid_row;
        }
        private void insert_all_child_of_node(int i_grid_row, DS_RPT_BO_NHIEM ip_ds_don_vi)
        {
            US_RPT_BO_NHIEM m_v_us = new US_RPT_BO_NHIEM();

            grid2us_object(m_v_us, i_grid_row);

            DataRow[] v_arr_dr_child = ip_ds_don_vi.RPT_BO_NHIEM.Select(RPT_BO_NHIEM.ID_DV_CT + "=" + m_v_us.dcID_DON_VI.ToString());
            foreach (DataRow v_dr in v_arr_dr_child)
            {
                US_RPT_BO_NHIEM m_v_us_child = new US_RPT_BO_NHIEM();
                m_v_us_child.DataRow2Me(v_dr);
                int v_i_child_row = -1;
                insert_child_node(
                    m_v_us_child
                    , ip_ds_don_vi
                    , i_grid_row
                    , ref v_i_child_row);
                insert_all_child_of_node(v_i_child_row, ip_ds_don_vi);
            }
        }