private void AddColumn(string key, IEnumerable <IColumnProcess> alltools) { if (dataView == null) { return; } var col = new DataGridTemplateColumn { Header = key, Width = CellWidth }; var dt = new DataTemplate(); col.CellTemplate = dt; var fef = new FrameworkElementFactory(typeof(MultiLineTextEditor)); var binding = new Binding(); binding.Path = new PropertyPath(($"[{key}]")); fef.SetBinding(ContentControl.ContentProperty, binding); fef.SetBinding(MultiLineTextEditor.TextProperty, binding); dt.VisualTree = fef; col.CellTemplate = dt; dataView.Columns.Add(col); var group = new SmartGroup { Name = key, Value = new ObservableCollection <IColumnProcess>(alltools.Where(d => d.Column == key)) }; group.PropertyChanged += (s, e) => { if (e.PropertyName == "Name") { var last = alltools.LastOrDefault() as IColumnDataTransformer; if (last != null && last.TypeName == "列名修改器" && last.NewColumn == key) { last.NewColumn = group.Name; } else { last = PluginProvider.GetObjectInstance("列名修改器") as IColumnDataTransformer; last.NewColumn = group.Name; last.Column = key; InsertModule(last); ETLMount++; OnPropertyChanged("ETLMount"); if (IsAutoRefresh) { RefreshSamples(); } } } }; SmartGroupCollection.Add(group ); }
public void RefreshSamples(bool canGetDatas = true) { if (shouldUpdate == false) { return; } if (SysProcessManager == null) { return; } if (!mudoleHasInit) { return; } OnPropertyChanged("AllETLMount"); var tasks = SysProcessManager.CurrentProcessTasks.Where(d => d.Publisher == this).ToList(); if (tasks.Any()) { var str = $"{Name}已经有任务在执行,由于调整参数,是否要取消当前任务重新执行?\n 【取消】:【不再提醒】"; if (isErrorRemind == false) { XLogSys.Print.Warn($"{Name}已经有任务在执行,请在任务管理器中取消该任务后再刷新"); return; } if (!MainDescription.IsUIForm) { return; } var result = MessageBox.Show(str, "提示信息", MessageBoxButton.YesNoCancel); if (result == MessageBoxResult.Yes) { foreach (var item in tasks) { item.Remove(); } XLogSys.Print.Warn(str + " 已经取消"); } else if (result == MessageBoxResult.Cancel) { isErrorRemind = false; } else { return; } } if (dataView == null && MainDescription.IsUIForm && IsUISupport) { var dock = MainFrm as IDockableManager ?? ControlExtended.DockableManager; var control = dock?.ViewDictionary.FirstOrDefault(d => d.Model == this); if (control != null) { if (control.View is IRemoteInvoke) { var invoke = control.View as IRemoteInvoke; invoke.RemoteFunc = DropAction; } dynamic dy = control.View; dataView = dy.DataList; scrollViewer = dy.ScrollViewer; alltoolList = dy.ETLToolList; currentToolList = dy.CurrentETLToolList; currentToolList.MouseDoubleClick += (s, e) => { if (e.ChangedButton != MouseButton.Left) { return; } var process = currentToolList.SelectedItem as IColumnProcess; if (process == null) { return; } var oldProp = process.UnsafeDictSerializePlus(); var window = PropertyGridFactory.GetPropertyWindow(process); window.Closed += (s2, e2) => { if ( (oldProp.IsEqual(process.UnsafeDictSerializePlus()) == false && IsAutoRefresh).SafeCheck ("检查模块参数是否修改", LogType.Debug)) { RefreshSamples(); } }; window.ShowDialog(); }; dragMgr = new ListViewDragDropManager <IColumnProcess>(currentToolList); dragMgr.ShowDragAdorner = true; alltoolList.MouseMove += (s, e) => { if (e.LeftButton == MouseButtonState.Pressed) { var attr = alltoolList.SelectedItem as XFrmWorkAttribute; if (attr == null) { return; } var data = new DataObject(typeof(XFrmWorkAttribute), attr); try { DragDrop.DoDragDrop(control.View as UserControl, data, DragDropEffects.Move); } catch (Exception ex) { } } }; } } if (dataView == null) { return; } Analyzer.Items.Clear(); var alltools = CurrentETLTools.Take(ETLMount).ToList(); var func = alltools.Aggregate(isexecute: false, analyzer: Analyzer); if (!canGetDatas) { return; } SmartGroupCollection.Clear(); Documents.Clear(); shouldUpdate = false; var i = 0; foreach (var currentEtlTool in CurrentETLTools) { (currentEtlTool).ETLIndex = i++; } shouldUpdate = true; if (!MainDescription.IsUIForm) { return; } all_columns.Clear(); dataView.Columns.Clear(); AddColumn("", alltools); var temptask = TemporaryTask.AddTempTask(Name + "_转换", func(new List <IFreeDocument>()).Take(SampleMount), data => { ControlExtended.UIInvoke(() => { foreach (var key in data.GetKeys().Where(d => all_columns.Contains(d) == false).OrderBy(d => d)) { AddColumn(key, alltools); DeleteColumn(""); all_columns.Add(key); } Documents.Add((data)); InitUI(); }); }, r => { var tool = CurrentTool; var outputCol = new List <string>(); var inputCol = new List <string>(); if (tool != null) { inputCol.Add(tool.Column); var transformer = tool as IColumnDataTransformer; if (transformer != null) { if (transformer is CrawlerTF) { var crawler = transformer as CrawlerTF; outputCol = crawler?.Crawler?.CrawlItems.Select(d => d.Name).ToList(); } else if (transformer is ETLBase) { var etl = transformer as ETLBase; var target = etl.GetModule <SmartETLTool>(etl.ETLSelector.SelectItem); outputCol = target?.Documents.GetKeys().ToList(); inputCol.AddRange(etl.MappingSet.Split(' ').Select(d => d.Split(':')[0])); } else { outputCol = transformer.NewColumn.Split(' ').ToList(); } SmartGroupCollection.Where(d => outputCol != null && outputCol.Contains(d.Name)) .Execute(d => d.GroupType = GroupType.Output); SmartGroupCollection.Where(d => inputCol.Contains(d.Name)) .Execute(d => d.GroupType = GroupType.Input); } } var firstOutCol = outputCol?.FirstOrDefault(); if (firstOutCol != null) { var index = all_columns.IndexOf(firstOutCol); if (index != -1 && ETLMount < AllETLMount) { scrollViewer.ScrollToHorizontalOffset(index * CellWidth); } } var nullgroup = SmartGroupCollection.FirstOrDefault(d => string.IsNullOrEmpty(d.Name)); nullgroup?.Value.AddRange( alltools.Where( d => Documents.GetKeys().Contains(d.Column) == false && string.IsNullOrEmpty(d.Column) == false)); nullgroup?.OnPropertyChanged("Value"); } , SampleMount); temptask.Publisher = this; temptask.IsSelected = true; SysProcessManager.CurrentProcessTasks.Add(temptask); }
private void DeleteColumn(string key) { SmartGroupCollection.RemoveElementsNoReturn(d => d.Name == key); dataView.Columns.RemoveElementsNoReturn(d => d.Header.ToString() == key); }