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
{
}
}
}
}