public static BaseTable DataSetToVisualizerBase(DataSet p_objDataSetToVisualize)
        {
            // List of bast type tables
            VisualizerBaseTable[] arrTables = new VisualizerBaseTable[p_objDataSetToVisualize.Tables.Count];

            // for each table in DataSet
            for (int intCurrTable = 0; intCurrTable < p_objDataSetToVisualize.Tables.Count; intCurrTable++)
            {
                #region Convert DataTable to Base Table

                // Get current Table
                DataTable dtSingleTableFromDS = p_objDataSetToVisualize.Tables[intCurrTable];

                // Create Dictionary of columns and types
                Dictionary<string, Type> dicColumns = new Dictionary<string, Type>();
                foreach (DataColumn column in dtSingleTableFromDS.Columns)
                {
                    dicColumns.Add(column.ColumnName, column.DataType);
                }

                // Create array of Primary-key columns
                string[] arrPrimaryKeys = new string[dtSingleTableFromDS.PrimaryKey.Length];
                for (int intCurrPK = 0; intCurrPK < arrPrimaryKeys.Length; intCurrPK++)
                {
                    arrPrimaryKeys[intCurrPK] = dtSingleTableFromDS.PrimaryKey[intCurrPK].ColumnName;
                }

                // Create Base table from current DataTable
                VisualizerBaseTable objSingleTableFromDS = new VisualizerBaseTable(DataTableToMatrix(dtSingleTableFromDS),
                                                          dicColumns,
                                                          arrPrimaryKeys,
                                                          dtSingleTableFromDS.TableName);

                // Ver2: prepare to Hierarchical DataView within Dataset
                // Ver2: objSingleTableFromDS.MyIdField = objHierarchicalDV.MyIDField;
                // Ver2: objSingleTableFromDS.MyParentIdField = objHierarchicalDV.MyParentIDField;

                #endregion

                // Add Base table to array of tables
                arrTables[intCurrTable] = objSingleTableFromDS;
            }

            // Create base object to that can go between debugger and debugee
            BaseTable objVisualizer = new BaseTable(arrTables);

            return objVisualizer;
        }
        public static BaseTable DataTableToBaseData(DataTable p_dtDataTableToVisualize)
        {
            #region Preparation

            // Create columns dictionary with types (key - tablename, value - type)
            Dictionary<string, Type> dicColumns = new Dictionary<string, Type>();
            foreach (DataColumn objDataColumn in p_dtDataTableToVisualize.Columns)
            {
                dicColumns.Add(objDataColumn.ColumnName, objDataColumn.DataType);
            }

            // Create array of primary key columns
            string[] arrPrimaryKeys = new string[p_dtDataTableToVisualize.PrimaryKey.Length];

            // for each primary column
            for (int intCurrPK = 0; intCurrPK < p_dtDataTableToVisualize.PrimaryKey.Length; intCurrPK++)
            {
                arrPrimaryKeys[intCurrPK] = p_dtDataTableToVisualize.PrimaryKey[intCurrPK].ColumnName;
            }

            #endregion

            // Create base object to that can go between debugger and debugee
            BaseTable objTableToVisualize =
                new BaseTable(DataTableToMatrix(p_dtDataTableToVisualize),
                                         dicColumns,
                                         arrPrimaryKeys,
                                         p_dtDataTableToVisualize.TableName);

            return objTableToVisualize;
        }