using BBWY.Client.Models.APIModel; using BBWY.Client.Models.APIModel.Response.PackTask; using BBWY.Client.Views.PackTask; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Markup; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace BBWY.Client.Views.TotalPackTask { /// <summary> /// PackUserSalaryControl.xaml 的交互逻辑 /// </summary> public partial class PackUserSalaryControl : UserControl { public PackUserSalaryControl() { InitializeComponent(); } public List<PackUserSalary> PackUserSalaries { get { return (List<PackUserSalary>)GetValue(PackUserSalariesProperty); } set { SetValue(PackUserSalariesProperty, value); } } public static readonly DependencyProperty PackUserSalariesProperty = DependencyProperty.Register("PackUserSalaries", typeof(List<PackUserSalary>), typeof(PackUserSalaryControl), new PropertyMetadata(ChangedProperty)); private static void ChangedProperty(DependencyObject d, DependencyPropertyChangedEventArgs e) { var control = d as PackUserSalaryControl; // control.Str var newValue = e.NewValue as List<PackUserSalary>; control.PackUserSalaries = newValue; control.LoadData(); } string xaml = @" <Grid xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation""> <Grid.RowDefinitions> <RowDefinition Height=""30""/> [:Row:] </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width=""30""/> <ColumnDefinition Width=""80""/> <ColumnDefinition MinWidth=""60""/> <ColumnDefinition MinWidth=""60""/> [:Column:] </Grid.ColumnDefinitions> <CheckBox HorizontalAlignment=""Center"" Grid.Column=""0"" HorizontalContentAlignment=""Center"" /> <TextBlock Text=""日期"" Grid.Column=""1"" Style=""{StaticResource middleTextBlock}""/> <TextBlock Text=""花名"" Grid.Column=""2"" Style=""{StaticResource middleTextBlock}""/> <TextBlock Text=""总收益"" Grid.Column=""3"" Style=""{StaticResource middleTextBlock}""/> [:HeaderNameList:] <Border Width=""1"" HorizontalAlignment=""Left"" Background=""{StaticResource Border.Brush}"" Grid.RowSpan=""[:DataCount+1:]""/> <Border Width=""1"" HorizontalAlignment=""Right"" Background=""{StaticResource Border.Brush}"" Grid.Column=""0"" /> <Border Width=""1"" HorizontalAlignment=""Right"" Background=""{StaticResource Border.Brush}"" Grid.Column=""1"" /> <Border Width=""1"" HorizontalAlignment=""Right"" Background=""{StaticResource Border.Brush}"" Grid.Column=""2"" /> <Border Width=""1"" HorizontalAlignment=""Right"" Background=""{StaticResource Border.Brush}"" Grid.Column=""3"" /> [:BorderHeaderList:] <Border Width=""1"" HorizontalAlignment=""Right"" Background=""{StaticResource Border.Brush}"" Grid.Column=""[:4+DataItemCount:]"" Grid.RowSpan=""[:DataCount+1:]""/> <Border Height=""1"" VerticalAlignment=""Top"" Grid.ColumnSpan=""[:4+DataItemCount:]"" Background=""{StaticResource Border.Brush}"" Grid.Row=""0""/> <Border Height=""1"" VerticalAlignment=""Top"" Grid.ColumnSpan=""[:4+DataItemCount:]"" Background=""{StaticResource Border.Brush}"" Grid.Row=""1""/> [:DataList:] </Grid>"; const string rows = @"<RowDefinition Height=""30""/>"; string columns = @"<ColumnDefinition MinWidth=""60""/>"; string headName = @"<TextBlock Text=""[:ServiceName:]"" Grid.Column=""[:ColumnIndex:]"" Grid.Row=""[:RowIndex:]"" Style=""{StaticResource middleTextBlock}""/>"; string borderColumns = @" <Border Width=""1"" HorizontalAlignment=""Right"" Background=""{StaticResource Border.Brush}"" Grid.Column=""[:ColumnIndex:]"" Grid.Row=""[:RowIndex:]"" />"; /// <summary> /// index 从1开始 0+1 /// </summary> string rowStr = @" <CheckBox HorizontalAlignment=""Center"" Grid.Column=""0"" Grid.Row=""[:RowIndex:]"" HorizontalContentAlignment=""Center"" /> <TextBlock Text=""[:Date:]"" Grid.Column=""1"" Grid.Row=""[:RowIndex:]"" Style=""{StaticResource middleTextBlock}""/> <TextBlock Text=""[:PackUserName:]"" Grid.Column=""2"" Grid.Row=""[:RowIndex:]"" Style=""{StaticResource middleTextBlock}""/> <TextBlock Text=""[:TotalIncome:]"" Grid.Column=""3"" Grid.Row=""[:RowIndex:]"" Style=""{StaticResource middleTextBlock}""/> [:HeaderPriceList:] <Border Width=""1"" HorizontalAlignment=""Right"" Background=""{StaticResource Border.Brush}"" Grid.Column=""0"" Grid.Row=""[:RowIndex:]""/> <Border Width=""1"" HorizontalAlignment=""Right"" Background=""{StaticResource Border.Brush}"" Grid.Column=""1"" Grid.Row=""[:RowIndex:]""/> <Border Width=""1"" HorizontalAlignment=""Right"" Background=""{StaticResource Border.Brush}"" Grid.Column=""2"" Grid.Row=""[:RowIndex:]""/> <Border Width=""1"" HorizontalAlignment=""Right"" Background=""{StaticResource Border.Brush}"" Grid.Column=""3"" Grid.Row=""[:RowIndex:]""/> <Border Width=""1"" HorizontalAlignment=""Right"" Background=""{StaticResource Border.Brush}"" Grid.Column=""4"" Grid.Row=""[:RowIndex:]""/> [:BorderDataList:] <Border Height=""1"" VerticalAlignment=""Bottom"" Grid.ColumnSpan=""[:4+DataItemCount:]"" Background=""{StaticResource Border.Brush}"" Grid.Row=""[:RowIndex:]""/>"; string serviceText = @" <TextBlock Text=""[:ServicePrice:]"" Grid.Column=""[:ColumnIndex:]"" Grid.Row=""[:RowIndex:]"" Style=""{StaticResource middleTextBlock}""/>"; string serviceBorder = @" <Border Width=""1"" HorizontalAlignment=""Right"" Background=""{StaticResource Border.Brush}"" Grid.Column=""[:ColumnIndex:]"" Grid.Row=""[:RowIndex:]""/>"; public void LoadData() { if (PackUserSalaries == null ) return; if ( PackUserSalaries.Count <= 0) { App.Current.Dispatcher.Invoke(() => { gd.Children.Clear(); }); } try { App.Current.Dispatcher.Invoke(() => { gd.Children.Clear(); }); var count = PackUserSalaries.Count; StringBuilder sbRow =new StringBuilder(); for (int i = 0; i < count; i++) { sbRow.AppendLine(rows); } string rowDefinition = sbRow.ToString(); StringBuilder sbColumn = new StringBuilder(); var packServices = PackUserSalaries[0].IncomeItems;//服务项目列表 var packServiceCount = packServices.Count; //服务项目数量 StringBuilder sbHeaderNameList = new StringBuilder(); StringBuilder sbBorderHeaderList=new StringBuilder(); for (int i = 0; i < packServiceCount; i++) { sbColumn.AppendLine(columns); sbHeaderNameList.AppendLine(headName.Replace("[:ServiceName:]", packServices[i].Name) .Replace("[:ColumnIndex:]", (i+4).ToString()) .Replace("[:RowIndex:]", "0")); sbBorderHeaderList.AppendLine(borderColumns.Replace("[:ColumnIndex:]", (i + 4).ToString()) .Replace("[:RowIndex:]", "0")); } string columnDefinition = sbColumn.ToString(); string HeaderNameList= sbHeaderNameList.ToString(); StringBuilder dataListSB= new StringBuilder(); for (int i = 0; i < PackUserSalaries.Count; i++) { var rowIndex = 1 + i; StringBuilder headerPriceListSB = new StringBuilder(); StringBuilder serviceBorderSB = new StringBuilder(); for (int j = 0; j < PackUserSalaries[i].IncomeItems.Count; j++) { var columnIndex = 4 + j;//[:HeaderPriceList:] headerPriceListSB.AppendLine(serviceText.Replace("[:ServicePrice:]", PackUserSalaries[i].IncomeItems[j].TotalPrice.ToString()) .Replace("[:ColumnIndex:]", columnIndex.ToString()) .Replace("[:RowIndex:]", rowIndex.ToString())); serviceBorderSB.AppendLine(serviceBorder.Replace("[:ColumnIndex:]", columnIndex.ToString()) .Replace("[:RowIndex:]", rowIndex.ToString())); } dataListSB.AppendLine(rowStr.Replace("[:Date:]", PackUserSalaries[i].Date.ToString("yyyy-MM-dd")) .Replace("[:PackUserName:]", PackUserSalaries[i].PackUserName) .Replace("[:TotalIncome:]", PackUserSalaries[i].TotalIncome.ToString("0.00")) .Replace("[:HeaderPriceList:]", headerPriceListSB.ToString()) .Replace("[:BorderDataList:]", serviceBorderSB.ToString()) .Replace("[:RowIndex:]", rowIndex.ToString()) .Replace("[:4+DataItemCount:]", (packServiceCount+4).ToString()) ); } var newGrid = xaml.Replace("[:Row:]", rowDefinition) .Replace("[:Column:]", columnDefinition) .Replace("[:HeaderNameList:]", HeaderNameList) .Replace("[:DataCount+1:]", (count+1).ToString()) .Replace("[:4+DataItemCount:]", (packServiceCount + 4).ToString()) .Replace("[:BorderHeaderList:]", sbBorderHeaderList.ToString()) .Replace("[:DataList:]", dataListSB.ToString()); var grid = XamlReader.Parse(newGrid) as Grid; App.Current.Dispatcher.Invoke(() => { gd.Children.Add(grid); }); } catch { } } } }