!提交代码
This commit is contained in:
201
货架标准上位机/ViewModels/DataListViewModel.cs
Normal file
201
货架标准上位机/ViewModels/DataListViewModel.cs
Normal file
@ -0,0 +1,201 @@
|
||||
using HandyControl.Controls;
|
||||
using MiniExcelLibs;
|
||||
using Ping9719.WpfEx.Mvvm;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Input;
|
||||
using System.Windows.Media;
|
||||
using SqlSugar;
|
||||
using HandyControl.Data;
|
||||
using System.Windows;
|
||||
|
||||
namespace 货架标准上位机.ViewModel
|
||||
{
|
||||
public class DataListViewModel : BindableBase
|
||||
{
|
||||
private List<MyTestTable> dataList = new List<MyTestTable>();
|
||||
/// <summary>
|
||||
/// 列表数据
|
||||
/// </summary>
|
||||
public List<MyTestTable> DataList { get => dataList; set { SetProperty(ref dataList, value); } }
|
||||
|
||||
#region 进度
|
||||
private bool IsLoad_;
|
||||
public bool IsLoad { get => IsLoad_; set { SetProperty(ref IsLoad_, value); } }
|
||||
#endregion
|
||||
|
||||
#region 筛选
|
||||
private DateTime? timeGo = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);
|
||||
/// <summary>
|
||||
/// 开始时间(默认只显示今天开始的数据)
|
||||
/// </summary>
|
||||
public DateTime? TimeGo { get => timeGo; set { SetProperty(ref timeGo, value); } }
|
||||
|
||||
private DateTime? timeTo;
|
||||
/// <summary>
|
||||
/// 结束时间
|
||||
/// </summary>
|
||||
public DateTime? TimeTo { get => timeTo; set { SetProperty(ref timeTo, value); } }
|
||||
|
||||
private string info1;
|
||||
public string Info1 { get => info1; set { SetProperty(ref info1, value); } }
|
||||
|
||||
private string info2;
|
||||
public string Info2 { get => info2; set { SetProperty(ref info2, value); } }
|
||||
|
||||
#endregion
|
||||
|
||||
#region 页码
|
||||
private int maxPageCount;
|
||||
/// <summary>
|
||||
/// 最大页数
|
||||
/// </summary>
|
||||
public int MaxPageCount { get => maxPageCount; set { SetProperty(ref maxPageCount, value); } }
|
||||
|
||||
private int pageIndex = 1;
|
||||
/// <summary>
|
||||
/// 当前页
|
||||
/// </summary>
|
||||
public int PageIndex { get => pageIndex; set { SetProperty(ref pageIndex, value); } }
|
||||
|
||||
private int dataCountPerPage = 20;
|
||||
/// <summary>
|
||||
/// 每页的数据量
|
||||
/// </summary>
|
||||
public int DataCountPerPage { get => dataCountPerPage; set { SetProperty(ref dataCountPerPage, value); } }
|
||||
|
||||
public ICommand PageUpdateCommand { get => new DelegateCommand<FunctionEventArgs<int>>(PageUpdate); }
|
||||
/// <summary>
|
||||
/// 页码更新
|
||||
/// </summary>
|
||||
public void PageUpdate(FunctionEventArgs<int> page)
|
||||
{
|
||||
PageIndex = page.Info;
|
||||
UpdateList();
|
||||
}
|
||||
#endregion
|
||||
|
||||
public ICommand ExportExcelCommand { get => new DelegateCommand(ExportExcel); }
|
||||
/// <summary>
|
||||
/// 导出为excel
|
||||
/// </summary>
|
||||
public async void ExportExcel()
|
||||
{
|
||||
if (IsLoad)
|
||||
{
|
||||
Growl.Info("有任务正在进行,请稍等片刻。");
|
||||
return;
|
||||
}
|
||||
IsLoad = true;
|
||||
|
||||
Microsoft.Win32.SaveFileDialog sfd = new Microsoft.Win32.SaveFileDialog();
|
||||
sfd.Filter = ".xlsx文件(*.xlsx)|*.xlsx";
|
||||
sfd.FileName = "XXXX记录信息";
|
||||
sfd.OverwritePrompt = true;
|
||||
if (sfd.ShowDialog() != true)
|
||||
{
|
||||
IsLoad = false;
|
||||
return;
|
||||
}
|
||||
|
||||
string path = sfd.FileName;
|
||||
|
||||
try
|
||||
{
|
||||
//1.查询数据库,加入筛选条件,并按照时间倒序排序,并导出指定列
|
||||
var dbData = DataDb.db.Queryable<MyTestTable>()
|
||||
.WhereIF(TimeGo != null, o => o.Time > TimeGo)
|
||||
.WhereIF(TimeTo != null, o => o.Time < TimeTo)
|
||||
.WhereIF(!string.IsNullOrWhiteSpace(Info1), o => o.Info1.StartsWith(Info1.Trim()))
|
||||
.WhereIF(!string.IsNullOrWhiteSpace(Info2), o => o.Info2.StartsWith(Info2.Trim()))
|
||||
.OrderByDescending(o => o.Id)
|
||||
.Select(o => new
|
||||
{
|
||||
产品信息1 = o.Info1,
|
||||
产品信息2 = o.Info2,
|
||||
状态结果 = o.Status,
|
||||
创建时间 = o.Time.ToString("yyyy-MM-dd HH:mm:ss"),
|
||||
});
|
||||
|
||||
//2.导出为Excel,使用内存缓存的方式,防止数据量过大导致内存泄露
|
||||
var sqlkv = dbData.ToSql();
|
||||
var dataReader = await DataDb.db.Ado.GetDataReaderAsync(sqlkv.Key, sqlkv.Value);
|
||||
await MiniExcel.SaveAsAsync(path, dataReader, overwriteFile: true);
|
||||
dataReader.Close();
|
||||
|
||||
Growl.Success("导出成功。");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Growl.Error("导出失败:" + ex.Message);
|
||||
}
|
||||
finally
|
||||
{
|
||||
IsLoad = false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public ICommand UpdateListCommand { get => new DelegateCommand(UpdateList); }
|
||||
/// <summary>
|
||||
/// 更新信息
|
||||
/// </summary>
|
||||
public async void UpdateList()
|
||||
{
|
||||
if (IsLoad)
|
||||
{
|
||||
Growl.Info("有任务正在进行,请稍等片刻。");
|
||||
return;
|
||||
}
|
||||
IsLoad = true;
|
||||
|
||||
try
|
||||
{
|
||||
await Task.Delay(200);
|
||||
|
||||
//1.查询数据库,加入筛选条件,并按照时间倒序排序
|
||||
var dbData = DataDb.db.Queryable<MyTestTable>()
|
||||
.WhereIF(TimeGo != null, o => o.Time > TimeGo)
|
||||
.WhereIF(TimeTo != null, o => o.Time < TimeTo)
|
||||
.WhereIF(!string.IsNullOrWhiteSpace(Info1), o => o.Info1.StartsWith(Info1.Trim()))
|
||||
.WhereIF(!string.IsNullOrWhiteSpace(Info2), o => o.Info2.StartsWith(Info2.Trim()))
|
||||
.OrderByDescending(o => o.Id);
|
||||
|
||||
//2.开始分页(如模型不一样使用‘.Select<Model>()’来转换)
|
||||
RefAsync<int> totalNumber = 0;
|
||||
RefAsync<int> totalPage = 0;
|
||||
DataList = await dbData.ToPageListAsync(PageIndex, DataCountPerPage, totalNumber, totalPage);
|
||||
MaxPageCount = totalPage.Value;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Growl.Error("加载数据失败:" + ex.Message);
|
||||
}
|
||||
finally
|
||||
{
|
||||
IsLoad = false;
|
||||
}
|
||||
}
|
||||
|
||||
public ICommand SeeCommand { get => new DelegateCommand<MyTestTable>(See); }
|
||||
/// <summary>
|
||||
/// 查看详情
|
||||
/// </summary>
|
||||
public void See(MyTestTable obj)
|
||||
{
|
||||
if (IsLoad)
|
||||
{
|
||||
Growl.Info("有任务正在进行,请稍等片刻。");
|
||||
return;
|
||||
}
|
||||
|
||||
Growl.Info("信息:" + Newtonsoft.Json.JsonConvert.SerializeObject(obj));
|
||||
}
|
||||
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user