예제 #1
0
        /// <summary>
        /// Init Worksheet
        /// </summary>
        private void InitWorksheet()
        {
            WorksheetAttribute classAttribue = _RecordModelType.GetCustomAttribute(typeof(WorksheetAttribute)) as WorksheetAttribute;

            if (classAttribue != null)
            {
                _Worksheet.Name = classAttribue.Title;
            }
            else
            {
                _Worksheet.Name = _RecordModelType.Name;
            }

            PropertyInfo[] properties = _RecordModelType.GetProperties();
            Dictionary <PropertyInfo, ColumnHeaderAttribute> ColHeaderAttributeDict = new Dictionary <PropertyInfo, ColumnHeaderAttribute>();

            foreach (PropertyInfo property in properties)
            {
                ColumnHeaderAttribute headerAttribute = property.GetCustomAttribute(typeof(ColumnHeaderAttribute)) as ColumnHeaderAttribute;
                if (headerAttribute != null && headerAttribute.IsVisible) //filter invisible item
                {
                    ColHeaderAttributeDict.Add(property, headerAttribute);
                }
            }
            if (ColHeaderAttributeDict.Count < 1)
            {
#if DEBUG
                Console.WriteLine("InitWorksheet Failed: HeaderAttributes.Count is 0.");
#endif
                return;
            }
            ColHeaderAttributeDict = ColHeaderAttributeDict.OrderBy(one => one.Value.Index).ToDictionary(one => one.Key, one => one.Value); // order by index
            // Re-Set Index
            for (int i = 0; i < ColHeaderAttributeDict.Keys.Count; i++)
            {
                var key = ColHeaderAttributeDict.Keys.ElementAt(i);
                ColHeaderAttributeDict[key].Index = i;
            }


            _Worksheet.Columns = ColHeaderAttributeDict.Count;


            RangePosition rangePosition = new RangePosition();

            rangePosition.Cols = 1;
            rangePosition.Row  = 0;
            rangePosition.Rows = _Worksheet.RowCount;

            for (int i = 0; i < properties.Count(); i++)
            {
                PropertyInfo property  = properties[i];
                var          attribute = property.GetCustomAttribute(typeof(FormatAttributeBase));
                if (attribute == null)
                {
                    continue;
                }
                IFormatArgs formatArgs = attribute as IFormatArgs;
                if (formatArgs != null)
                {
                    ColumnHeaderAttribute headerAttribute = (from key in ColHeaderAttributeDict.Keys
                                                             where key.Equals(property)
                                                             select ColHeaderAttributeDict[property]).FirstOrDefault();

                    if (headerAttribute != null && headerAttribute.IsVisible)
                    {
                        rangePosition.Col = headerAttribute.Index;
                        //not work correctly
                        switch (formatArgs.CellDataFormatFlag)
                        {
                        case CellDataFormatFlag.General:
                            break;

                        case CellDataFormatFlag.Number:
                        {
                            NumberFormatAttribute numberFormatAttribute          = formatArgs as NumberFormatAttribute;
                            NumberDataFormatter.NumberFormatArgs numberFormatter = new NumberDataFormatter.NumberFormatArgs();
                            if (numberFormatAttribute.DecimalPlaces != short.MaxValue)
                            {
                                numberFormatter.DecimalPlaces = numberFormatAttribute.DecimalPlaces;
                            }
                            numberFormatter.NegativeStyle         = numberFormatAttribute.NegativeStyle;
                            numberFormatter.UseSeparator          = numberFormatAttribute.UseSeparator;
                            numberFormatter.CustomNegativePrefix  = numberFormatAttribute.CustomNegativePrefix;
                            numberFormatter.CustomNegativePostfix = numberFormatAttribute.CustomNegativePostfix;
                            _Worksheet.SetRangeDataFormat(rangePosition, CellDataFormatFlag.Number, numberFormatter);
                            //_ReoGridControl.DoAction(new SetRangeDataFormatAction(rangePosition, CellDataFormatFlag.Number, numberFormatter));
                            break;
                        }

                        case CellDataFormatFlag.DateTime:
                        {
                            DateTimeFormatAttribute dateTimeFormatAttribute             = formatArgs as DateTimeFormatAttribute;
                            DateTimeDataFormatter.DateTimeFormatArgs dateTimeFormatArgs = new DateTimeDataFormatter.DateTimeFormatArgs();
                            dateTimeFormatArgs.Format      = dateTimeFormatAttribute.Format;
                            dateTimeFormatArgs.CultureName = dateTimeFormatAttribute.CultureName;
                            _Worksheet.SetRangeDataFormat(rangePosition, CellDataFormatFlag.DateTime, dateTimeFormatArgs);
                            break;
                        }

                        case CellDataFormatFlag.Percent:
                            break;

                        case CellDataFormatFlag.Currency:
                            break;

                        case CellDataFormatFlag.Text:
                            break;

                        case CellDataFormatFlag.Custom:
                            break;

                        default:
                            break;
                        }
                    }
                }
            }

            _ColumnWidthList = new List <int>();
            _RowHeightList   = new List <int>();

            for (int i = 0; i < ColHeaderAttributeDict.Count; i++)
            {
                ColumnHeaderAttribute headerAttribute = ColHeaderAttributeDict.ElementAt(i).Value;

                if (string.IsNullOrEmpty(headerAttribute.Text))
                {
                    _Worksheet.ColumnHeaders[i].Text = ColHeaderAttributeDict.ElementAt(i).Key.Name;
                }
                else
                {
                    _Worksheet.ColumnHeaders[i].Text = headerAttribute.Text;
                }
                if (headerAttribute.Width <= 0)
                {
                    _Worksheet.ColumnHeaders[i].IsAutoWidth = true;
                }
                else
                {
                    _Worksheet.ColumnHeaders[i].Width = (ushort)headerAttribute.Width;
                }
                _Worksheet.ColumnHeaders[i].IsVisible = true;
                _Worksheet.ColumnHeaders[i].Tag       = ColHeaderAttributeDict.ElementAt(i).Key; // Tag stores PropertyInfo of Model
                _ColumnWidthList.Add(_Worksheet.ColumnHeaders[i].Width);                         // store column width
            }

            //stroe row height
            for (int i = 0; i < _Worksheet.Rows; i++)
            {
                _RowHeightList.Add(_Worksheet.RowHeaders[i].Height);
            }

            // load data
            LoadRecords();


            _Worksheet.BeforeCellEdit   += Worksheet_BeforeCellEdit;
            _Worksheet.CellDataChanged  += Worksheet_CellDataChanged;
            _Worksheet.RangeDataChanged += Worksheet_RangeDataChanged;
            _Worksheet.AfterPaste       += Worksheet_AfterPaste;

            _Worksheet.RowsHeightChanged   += Worksheet_RowsHeightChanged;
            _Worksheet.ColumnsWidthChanged += Worksheet_ColumnsWidthChanged;
        }