コード例 #1
0
        private void AddDynamicColumn(ColumnConvertArgs args, DynamicColumnType type)
        {
            var order = _views.MainForm.datasetMain.DynamicColumns.Count(x => x.RowState != DataRowState.Deleted) + 1;

            _views.MainForm.adapterDynamicColumns.Insert(args.ColumnInfo.Name, (int)type, order, String.Empty);
            _views.MainForm.adapterDynamicColumns.Fill(_views.MainForm.datasetMain.DynamicColumns);

            var newRow = _views.MainForm.datasetMain.DynamicColumns.FirstOrDefault(x => x.Title == args.ColumnInfo.Name);

            if (newRow != null)
            {
                args.ColumnInfo.DynamicColumnID = newRow.ID;
                args.ColumnInfo.IsDynamic       = true;
                args.ColumnInfo.IsExtra         = false;

                _views.MainForm.adapterDocuments.SetColumnDynamic(args.ColumnInfo.Name, args.ColumnInfo.DynamicColumnID);

                if (args.Categories != null)
                {
                    ConvertValuesToCategories(args);
                }
            }
            else
            {
                throw new Exception("Failed to add column");
            }
        }
コード例 #2
0
        protected void ConvertSelectedColumnAsync()
        {
            if (gridColumns.SelectedRows.Count == 0)
            {
                return;
            }

            ///////////////////////////////////////////////////////////////////////////////

            var row        = gridColumns.SelectedRows[0];
            var columnInfo = row.DataBoundItem as ColumnInfo;

            if (columnInfo != null)
            {
                UpdateUI(true);

                ///////////////////////////////////////////////////////////////////////////////

                var args = new ColumnConvertArgs
                {
                    ColumnInfo = columnInfo,
                    Categories = gridCategories.DataSource as IEnumerable <ColumnCategoryInfo>
                };

                worker.RunWorkerAsync(args);
            }
        }
コード例 #3
0
        private bool ConvertColumn(ColumnConvertArgs args)
        {
            DynamicColumnType type;

            if (args.ColumnInfo.Type == typeof(decimal) || args.ColumnInfo.Type == typeof(double) || args.ColumnInfo.Type == typeof(int))
            {
                type = DynamicColumnType.Numeric;
            }
            else if (args.ColumnInfo.Type == typeof(string))
            {
                type = args.Categories != null ? DynamicColumnType.Category : DynamicColumnType.FreeText;
            }
            else if (args.ColumnInfo.Type == typeof(DateTime))
            {
                type = DynamicColumnType.DateTime;
            }
            else
            {
                throw new Exception("Unsupported column data type");
            }

            ///////////////////////////////////////////////////////////////////////////////

            if (args.Categories != null)
            {
                var emptyNames = args.Categories
                                 .Where(x => !x.Empty && String.IsNullOrEmpty(x.ConvertTo))
                                 .ToList();

                if (emptyNames.Any())
                {
                    throw new Exception(String.Format("Provided names are invalid for categories that are not marked as Empty:{0}{0}{1}", Environment.NewLine, String.Join(", ", emptyNames.Select(x => x.Value))));
                }

                ///////////////////////////////////////////////////////////////////////////////

                var duplicateNumbers = args.Categories.GroupBy(x => new { x.ConvertTo, x.Number })
                                       .Select(y => y.Key)
                                       .GroupBy(x => x.Number)
                                       .Where(x => x.Count() > 1)
                                       .Select(x => x.Key)
                                       .ToList();

                if (duplicateNumbers.Any())
                {
                    throw new Exception(String.Format("Duplicate category numbers:{0}{0}{1}", Environment.NewLine, String.Join(", ", duplicateNumbers)));
                }
            }

            ///////////////////////////////////////////////////////////////////////////////

            AddDynamicColumn(args, type);

            return(true);
        }
コード例 #4
0
        private void ConvertValuesToCategories(ColumnConvertArgs args)
        {
            var dict = new HashSet <string>();

            foreach (var categoryInfo in args.Categories)
            {
                if (!categoryInfo.Empty)
                {
                    if (!dict.Contains(categoryInfo.ConvertTo))
                    {
                        _views.MainForm.adapterDynamicColumnCategories.Insert(args.ColumnInfo.DynamicColumnID, categoryInfo.ConvertTo, categoryInfo.Number, String.Empty);
                        dict.Add(categoryInfo.ConvertTo);
                    }
                }

                _views.MainForm.adapterDocuments.SqlSetColumnValueByColumn(args.ColumnInfo.Name, categoryInfo.Empty ? String.Empty : categoryInfo.ConvertTo, args.ColumnInfo.Name, categoryInfo.Value, ExpressionType.Equal);
            }

            ///////////////////////////////////////////////////////////////////////////////

            _views.MainForm.datasetMain.Documents.AcceptChanges();
            _views.MainForm.adapterDynamicColumnCategories.Fill(_views.MainForm.datasetMain.DynamicColumnCategories);
        }