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 { /// /// PackUserSalaryControl.xaml 的交互逻辑 /// public partial class PackUserSalaryControl : UserControl { public PackUserSalaryControl() { InitializeComponent(); } public List PackUserSalaries { get { return (List)GetValue(PackUserSalariesProperty); } set { SetValue(PackUserSalariesProperty, value); } } public static readonly DependencyProperty PackUserSalariesProperty = DependencyProperty.Register("PackUserSalaries", typeof(List), 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; control.PackUserSalaries = newValue; control.LoadData(); } string xaml = @" [:Row:] [:Column:] [:HeaderNameList:] [:BorderHeaderList:] [:DataList:] "; const string rows = @""; string columns = @""; string headName = @""; string borderColumns = @" "; /// /// index 从1开始 0+1 /// string rowStr = @" [:HeaderPriceList:] [:BorderDataList:] "; string serviceText = @" "; string serviceBorder = @" "; 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("0.00")) .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 { } } } }