Esempio n. 1
0
        public void FillKey(System.Data.DataTable table, int rowIndex)
        {
            if (!isFixedValue)
            {
                // use context key value ;

                if (string.IsNullOrEmpty(colName))
                {
                    keyValue = null;
                }

                if (rKey == null)
                {
                    rKey = ReusedKey.FindReusedKey(this);
                }

                keyValue = rKey.GetReusedValue(table, rowIndex);
                // RangeHelper.GetColValue (table, rowIndex, colName) ;
            }

            if (nextKey != null)
            {
                nextKey.FillKey(table, rowIndex);
            }
        }
Esempio n. 2
0
 public object GetGroupValue(GroupDataHolder holder, DataTable table, int valueIndex)
 {
     if (rGroupKey == null)
     {
         SearchKey key = new SearchKey();
         key.colName = this.tplGroupColName;
         rGroupKey   = ReusedKey.FindReusedKey(key);
     }
     return(rGroupKey.GetReusedValue(table, valueIndex));
     // return RangeHelper.GetColValue(table, valueIndex, tplGroupColName);
 }
Esempio n. 3
0
        public static ReusedKey FindReusedKey(SearchKey key)
        {
            for (int i = 0; i < keyPool.Count; i++)
            {
                ReusedKey reusedKey = keyPool [i];

                if (Equals(reusedKey.colName, key.colName))
                {
                    return(reusedKey);
                }
            }

            ReusedKey rKey = new ReusedKey();

            rKey.colName = key.colName;

            keyPool.Add(rKey);

            return(rKey);
        }
Esempio n. 4
0
        public void InsertOneColumn(TplBlock block, int colIndex, GroupDataHolder holder, DataTable table, int valueIndex, bool hasData)
        {
            if (hasData)
            {
                // block.startRowIndex ;
                Range colRange = RangeHelper.GetRange(tplRange.Worksheet,
                                                      startColIndex + colIndex, block.startRowIndex,
                                                      1, block.rowCount);
                // Insert new ;
                RangeHelper.InsertCopyRange(tplRange.Worksheet, colRange,
                                            1, block.rowCount,
                                            startColIndex + gCols + insertCount, block.startRowIndex,
                                            XlInsertShiftDirection.xlShiftToRight, tplLastColCount);
            }
            // Insert new Col in Template.
            Range tplColRange = RangeHelper.GetRange(tplRange.Worksheet,
                                                     startColIndex + colIndex, block.tplRange.Row,
                                                     1, block.tplRowCount);

            RangeHelper.InsertCopyRange(tplRange.Worksheet, tplColRange,
                                        1, block.tplRowCount,
                                        startColIndex + gCols + insertCount, tplColRange.Row,
                                        XlInsertShiftDirection.xlShiftToRight, tplLastColCount);
            // Refresh Line.TplRange ;
            RefreshLineTplRanges(block, 1);

            block.tplColumCount += 1;
            block.colCount      += 1;

            // Insert cell into exsit lineList.
            for (int lineIndex = 0; lineIndex < block.lineList.Count; lineIndex++)
            {
                TplLine line = block.lineList[lineIndex];

                int cellIndex = startCellIndex + colIndex;

                TplCell cell0 = line.cellList[cellIndex];

                TplCell cell = cell0.Copy();
                cell.lastColIndex += 1;


                line.cellList.Insert(startCellIndex + gCols + insertCount, cell);

                /*
                 * if (cell.useExcelFormula)
                 * {
                 *      cell.tplRange = cell0.tplRange ;
                 * }
                 */
                if (cell.formula != null)
                {
                    for (int keyIndex = 0; keyIndex < cell.formula.keyList.Count; keyIndex++)
                    {
                        GroupValueSearchKey gkey = cell.formula.keyList[keyIndex];
                        if (gkey.rKey == null)
                        {
                            SearchKey key0 = new SearchKey();
                            key0.colName = gkey.valueColName;

                            gkey.rKey = ReusedKey.FindReusedKey(key0);
                        }
                        SearchKey key = gkey.key;
                        while (key != null)
                        {
                            if (IsGroupedColumn(key.colName))
                            {
                                key.keyValue     = RangeHelper.GetColValue(table, valueIndex, key.colName);
                                key.isFixedValue = true;
                            }
                            key = key.nextKey;
                        }

                        block.gkeyList.Add(gkey.Copy());
                        if (gkey.key != null)
                        {
                            gkey.key.FillKey(table, valueIndex);
                        }

                        block.holder.AddValue(block.countedMap, gkey, table, valueIndex);
                    }
                }

                /*
                 * else if (cell.hgOption != InsertOption.never)
                 * {
                 *      // set fixed text
                 *      cell.tplTextContent = Convert.ToString(RangeHelper.GetColValue (table, valueIndex, cell.tplValueColName)) ;
                 * }
                 */

                cell.align = GroupAlign.none;

                Console.WriteLine("Inserted hg Line[" + lineIndex + "]cell[" + cellIndex + "] = " + cell.formula);

                /* update Row Value */
                if (lineIndex < block.rowCount)
                {
                    Range cellRange = RangeHelper.GetCell(tplRange.Worksheet, startColIndex + gCols + insertCount,
                                                          block.startRowIndex + lineIndex);

                    cell.WriteCell(tpl, holder, cellRange, table, valueIndex);
                }
            }
            // Console.WriteLine ("---- End of " + valueIndex);
            // increment next

            nextCloIndex += 1;
            insertCount++;
        }
Esempio n. 5
0
        public int FillBlock(DataTable table)
        {
            int rowIndex = startRowIndex;

            for (int valueIndex = 0; valueIndex < table.Rows.Count; valueIndex++)
            {
                countedMap.Clear();
                // fill key for each line, and count Data.
                // Check is Need Row ;
                if (dColumn != null && !dCloumnsCreated)
                {
                    dColumn.CheckColumn(this, holder, rowIndex,
                                        table, valueIndex);
                }

                // fill key for each line, and count Data.
                for (int j = 0; j < gkeyList.Count; j++)
                {
                    GroupValueSearchKey gkey = gkeyList [j];

                    if (gkey.rKey == null)
                    {
                        SearchKey key = new SearchKey();
                        key.colName = gkey.valueColName;
                        gkey.rKey   = ReusedKey.FindReusedKey(key);
                    }

                    gkey = gkey.Copy();
                    if (gkey.key != null)
                    {
                        gkey.key.FillKey(table, valueIndex);
                    }

                    holder.AddValue(countedMap, gkey, table, valueIndex);
                }

                // fill Data
                for (int j = 0; j < lineList.Count; j++)
                {
                    TplLine line = lineList[j];

                    /*
                     * if (j == 4)
                     *      j = 4 ;
                     */
                    int nl = line.FillLine(holder, rowIndex, table, valueIndex);
                    if (nl > 0)
                    {
                        FillLastLine(j, lastUsedLine, rowIndex - 1, table, lastUsedLineValueIndex);

                        lastUsedLine           = line;
                        lastUsedLineValueIndex = valueIndex;

                        // is LastLine, update current line
                        if (valueIndex + 1 >= table.Rows.Count)
                        {
                            FillLastLine(j, line, rowIndex, table, lastUsedLineValueIndex);
                        }
                    }


                    /*else
                     * {
                     *      // Ensure Each Column is OK.
                     *      if (dColumn != null && lastUsedLine != null && lastUsedLine == line)
                     *      {
                     *              if (! lastUsedLine.containsHGroup)
                     *                      lastUsedLine.UpdateRowData (holder, rowIndex - 1, table, valueIndex);
                     *
                     *              if (updateAllRow)
                     *              {
                     *                      for (int k = 0 ; k <= j ; k ++)
                     *                      {
                     *                              TplLine hLine = lineList [k] ;
                     *                              if (hLine.containsHGroup && hLine.insertedRowList.Count > 0)
                     *                              {
                     *                                      hLine.UpdateRowData(holder,
                     *                                                          hLine.insertedRowList[hLine.insertedRowList.Count - 1],
                     *                                                          table, valueIndex);
                     *                              }
                     *                      }
                     *              }
                     *
                     *      }
                     * }*/
                    rowIndex += nl;
                    rowCount += nl;
                }
            }

            MergeHGroupCells();

            //if the table is custum empty ,ignor the  MergeVGroupCells
            if (table.ExtendedProperties.ContainsKey("TableType") &&
                table.ExtendedProperties["TableType"].ToString() == "CustumEmpty")
            {
                return(rowCount);
            }

            MergeVGroupCells();
            return(rowCount);
        }
Esempio n. 6
0
        public void AddValue(Dictionary <GroupValueSearchKey, bool> map, GroupValueSearchKey gkey,
                             System.Data.DataTable table, int valueIndex)
        {
            if (map.ContainsKey(gkey))
            {
                // ignored.
                return;
            }

            // judge Data is Match
            if (gkey.key != null)
            {
                SearchKey tmpKey = gkey.key;
                while (tmpKey != null)
                {
                    if (tmpKey.rKey == null)
                    {
                        tmpKey.rKey = ReusedKey.FindReusedKey(tmpKey);
                    }

                    if (tmpKey.isFixedValue)
                    {
                        // Compare Fixed value Key only
                        object keyValue = null;

                        keyValue = tmpKey.rKey.GetReusedValue(table, valueIndex);
                        //  RangeHelper.GetColValue (table, valueIndex, tmpKey.colName) ;

                        // Not match, return .
                        if (!Equals(keyValue, tmpKey.keyValue))
                        {
                            return;
                        }
                    }

                    tmpKey = tmpKey.nextKey;
                }

                /*SearchKey copyKey = gkey.key.Copy0 (false) ;
                 * copyKey.FillKey (table, valueIndex);
                 *
                 * // not match.
                 * if (! copyKey.Equals (gkey.key))
                 *      return ;*/
            }

            object lastValue;

            if (!valueList.TryGetValue(gkey, out lastValue))
            {
                lastValue = 0;
                valueList.Add(gkey, lastValue);
            }

            if (gkey.rKey == null)
            {
                SearchKey key = new SearchKey();
                key.colName = gkey.valueColName;
                gkey.rKey   = ReusedKey.FindReusedKey(key);
            }

            valueList [gkey] = CalculateForumla(gkey.formula, lastValue,
                                                gkey.rKey.GetReusedValue(table, valueIndex));

            map[gkey /*.Copy()*/] = true;
        }