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"); } }
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); } }
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); }
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); }