private void service_GetGroupDataCompleted(object sender, GetGroupDataCompletedEventArgs e) { this.Busy.IsBusy = false; if (e.Error != null) { e.Error.ShowError(); return; } if (e.Result != null) { ListChartTab.Tag = e.Result.ToList(); var data = e.Result.ToList(); foreach (var group in data) { //没数据的就不用显示了 var groupItems = group.GroupItems.Where(i => i.Values.Count > 0).ToList(); var scroll = new ScrollViewer() { }; var tab = new TabItem { Header = group.TableName, Tag = group.TableName, }; var grid = new Grid(); var chartWidth = (this.ListChartTab.Width - 50) / 2; var chartHeight = 300; //最大列索引 var maxColumnIndex = Math.Floor(ListChartTab.Width / chartWidth); //最大行索引 var maxRowIndex = ((groupItems.Count % maxColumnIndex == 0 ? 0 : (maxColumnIndex - groupItems.Count % maxColumnIndex)) + groupItems.Count) / maxColumnIndex; //初始化表格布局控件 for (int j = 0; j < maxRowIndex; j++) { RowDefinition rd = new RowDefinition(); rd.Height = new GridLength(chartHeight); grid.RowDefinitions.Add(rd); } for (int j = 0; j < maxColumnIndex; j++) { ColumnDefinition cd = new ColumnDefinition(); cd.Width = new GridLength(chartWidth); grid.ColumnDefinitions.Add(cd); } var rowIndex = 0; var columnIndex = 0; foreach (var groupItem in groupItems) { var chart = new Chart() { Margin = new Thickness(10) }; //把图表放置到相应的单元格中 chart.SetValue(Grid.ColumnProperty, columnIndex); chart.SetValue(Grid.RowProperty, rowIndex); if (columnIndex < maxColumnIndex - 1) { columnIndex++; } else { columnIndex = 0; rowIndex++; } var ps = new PieSeries(); ps.ItemsSource = CombineData(groupItem.Values, 10); ps.IsSelectionEnabled = true; ps.IndependentValuePath = "Key"; ps.DependentValuePath = "Value"; ps.AnimationSequence = AnimationSequence.Simultaneous; ps.SelectionChanged += new SelectionChangedEventHandler(ps_SelectionChanged); chart.Title = groupItem.DisplayName; if (!string.IsNullOrEmpty(groupItem.Description)) chart.Title += string.Format(" ({0})", groupItem.Description); chart.Series.Add(ps); grid.Children.Add(chart); } //滚动控件中包含表格布局 scroll.Content = grid; //tab页中包含滚动控件 tab.Content = scroll; //tab页容器中包含tab页 ListChartTab.Items.Add(tab); if (!string.IsNullOrEmpty(SearchCondition.SelectedTableName) && group.TableName == SearchCondition.SelectedTableName) tab.IsSelected = true; } } }
private void service_GetGroupDataCompleted(object sender, GetGroupDataCompletedEventArgs e) { this.Busy.IsBusy = false; if (e.Error != null) { e.Error.ShowError(); return; } if (e.Result != null) { ListChartTab.Tag = e.Result.ToList(); var data = e.Result.ToList(); foreach (var group in data) { //没数据的就不用显示了 var groupItems = group.GroupItems.Where(i => i.Values.Count > 0).ToList(); var scroll = new ScrollViewer() { }; var tab = new TabItem { Header = group.TableName, Tag = group.TableName, }; var grid = new Grid(); var chartWidth = (this.ListChartTab.Width - 50) / 2; var chartHeight = 300; //最大列索引 var maxColumnIndex = Math.Floor(ListChartTab.Width / chartWidth); //最大行索引 var maxRowIndex = ((groupItems.Count % maxColumnIndex == 0 ? 0 : (maxColumnIndex - groupItems.Count % maxColumnIndex)) + groupItems.Count) / maxColumnIndex; //初始化表格布局控件 for (int j = 0; j < maxRowIndex; j++) { RowDefinition rd = new RowDefinition(); rd.Height = new GridLength(chartHeight); grid.RowDefinitions.Add(rd); } for (int j = 0; j < maxColumnIndex; j++) { ColumnDefinition cd = new ColumnDefinition(); cd.Width = new GridLength(chartWidth); grid.ColumnDefinitions.Add(cd); } var rowIndex = 0; var columnIndex = 0; foreach (var groupItem in groupItems) { var chart = new Chart() { Margin = new Thickness(10) }; //把图表放置到相应的单元格中 chart.SetValue(Grid.ColumnProperty, columnIndex); chart.SetValue(Grid.RowProperty, rowIndex); if (columnIndex < maxColumnIndex - 1) { columnIndex++; } else { columnIndex = 0; rowIndex++; } var ps = new PieSeries(); ps.ItemsSource = CombineData(groupItem.Values, 10); ps.IsSelectionEnabled = true; ps.IndependentValuePath = "Key"; ps.DependentValuePath = "Value"; ps.AnimationSequence = AnimationSequence.Simultaneous; ps.SelectionChanged += new SelectionChangedEventHandler(ps_SelectionChanged); chart.Title = groupItem.DisplayName; if (!string.IsNullOrEmpty(groupItem.Description)) { chart.Title += string.Format(" ({0})", groupItem.Description); } chart.Series.Add(ps); grid.Children.Add(chart); } //滚动控件中包含表格布局 scroll.Content = grid; //tab页中包含滚动控件 tab.Content = scroll; //tab页容器中包含tab页 ListChartTab.Items.Add(tab); if (!string.IsNullOrEmpty(SearchCondition.SelectedTableName) && group.TableName == SearchCondition.SelectedTableName) { tab.IsSelected = true; } } } }