using DevExpress.XtraEditors; using DevExpress.XtraScheduler; using DxHelper; using ExtensionsDev; using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Threading.Tasks; using System.Windows.Forms; using DW5S.App.CorTools; using DW5S.DTO; using DW5S.Entity; using DW5S.Repostory; using Serilog; using static DevExpress.Xpo.Helpers.AssociatedCollectionCriteriaHelper; using DW5S.Service; using DW5S.ViewModel; using XdCxRhDW5S.ViewModel; namespace DW5S.App.UserControl { public partial class CtrlXl : DevExpress.XtraEditors.XtraUserControl { List list = new List(); int maxCount = 0; int maxPage = 0; int currentPage = 1; int? satCode = null; public CtrlXl() { InitializeComponent(); this.layoutControl1.UseDefault(); btnOpen.UseChooseFile().UseDoubleClickToSelectAll(); } private async void TxtSat_EditValueChanged(object sender, EventArgs e) { var sat = txtSat.EditValue as SatViewModel; satCode = sat?.SatCode; var unitOfWork = IocContainer.UnitOfWork; var repsXl = unitOfWork.Of() as XlRepository; this.maxCount = await repsXl.GetCount(satCode); var countPerPage = Convert.ToInt32(txtCountPerPage.Text); this.maxPage = maxCount / countPerPage; if (maxCount % countPerPage != 0) maxPage++; currentPage = 1; dataNavigator1.TextStringFormat = $"第{1}页/共{maxPage}页"; await LoadPageData(1); } private async void CtrlXl_Load(object sender, EventArgs e) { var unitOfWork = IocContainer.UnitOfWork; var repsXl = unitOfWork.Of() as XlRepository; var sat = await repsXl.GetAllSat(); txtSat.UseDefault("不限制", true).SetData(sat.To>(), displayField: nameof(SatViewModel.Sat)).UseDoubleClickToSelectAll(); gridXl.UseDefault(list).UseRowNumber().UseDeleteAsync(Del) .UseClearAsync(Clear).UseExportXlsx() .AddMenu("星历推算", SvgHelper.LoadFromFile("Image\\XlCalc.svg"), () => { var ids = gridView1.GetSelectedRows(); if (ids.Length <= 0) { XtraMessageBox.Show("请选择需要星历推算的数据信息!"); return; } var item = gridView1.GetRow(ids[0]) as XlViewModel; XlCalculateForm form = new XlCalculateForm(item.TwoLine); form.ShowDialog(); }) .AddMenu("刷新数据", SvgHelper.CreateRefresh(), async () => { currentPage = 1; dataNavigator1.Buttons.First.Enabled = false; dataNavigator1.Buttons.PrevPage.Enabled = false; dataNavigator1.Buttons.Last.Enabled = true; dataNavigator1.Buttons.NextPage.Enabled = true; dataNavigator1.TextStringFormat = $"第{currentPage}页/共{maxPage}页"; await LoadPageData(currentPage); }); await LoadData(1); dataNavigator1.TextStringFormat = $"第{currentPage}页/共{maxPage}页"; dataNavigator1.DataSource = list; dataNavigator1.Buttons.First.Enabled = false; dataNavigator1.Buttons.PrevPage.Enabled = false; } public async Task LoadData(int currentPage) { try { var unitOfWork = IocContainer.UnitOfWork; var repsXl = unitOfWork.Of() as XlRepository; this.maxCount = await repsXl.GetCount(satCode); var countPerPage = Convert.ToInt32(txtCountPerPage.Text); this.maxPage = maxCount / countPerPage; if (maxCount % countPerPage != 0) maxPage++; await LoadPageData(1); } catch (Exception ex) { string msg = "加载星历信息异常"; IocContainer.Logger.Error(ex, msg); DxHelper.MsgBoxHelper.ShowError(msg); } } private async Task LoadPageData(int currentPage) { var unitOfWork = IocContainer.UnitOfWork; var repsXl = unitOfWork.Of() as XlRepository; var dtResult = await repsXl.GetPageAsync(currentPage, Convert.ToInt32(txtCountPerPage.Text), satCode); list.Clear(); list.AddRange(dtResult.To>()); gridView1.RefreshData(); if (maxPage == 1) { dataNavigator1.Buttons.First.Enabled = false; dataNavigator1.Buttons.PrevPage.Enabled = false; dataNavigator1.Buttons.Last.Enabled = false; dataNavigator1.Buttons.NextPage.Enabled = false; } } private async void btnImp_Click(object sender, EventArgs e) { this.layoutControl1.Enabled = false; if (string.IsNullOrEmpty(btnOpen.Text)) { DxHelper.MsgBoxHelper.ShowInfo($"请选择星历文件"); this.layoutControl1.Enabled = true; return; } string file; try { file = await HttpHelper.UploadFileAsync(btnOpen.Text); } catch (Exception ex) { layoutControl1.Enabled = true; string msg = "上传星历文件异常"; IocContainer.Logger.Error(ex, msg); DxHelper.MsgBoxHelper.ShowError(msg); return; } try { XlImportDto dto = new XlImportDto() { File = file }; var result = await HttpHelper.PostRequestAsync(SysConfig.GetUrl("Xl/ImportTle"), dto); if (result.code == 200) { DxHelper.MsgBoxHelper.ShowInfo($"星历导入成功.共导入{result.data.Count}条"); await LoadData(1); } else { IocContainer.Logger.Error(result.msg); DxHelper.MsgBoxHelper.ShowError(result.msg); } } catch (Exception ex) { string msg = "星历导入异常"; IocContainer.Logger.Error(ex, msg); DxHelper.MsgBoxHelper.ShowError(msg); } this.layoutControl1.Enabled = true; } private async Task Del(List list) { try { this.Enabled = false; var unitOfWork = IocContainer.UnitOfWork; var repsXl = unitOfWork.Of(); await repsXl.DeleteAsync(list.To>()); await unitOfWork.SaveAsync(); await LoadData(1); return true; } catch (Exception ex) { string msg = "删除选中的星历时异常"; IocContainer.Logger.Error(ex, msg); DxHelper.MsgBoxHelper.ShowError(msg); return false; } finally { this.Enabled = true; } } private async Task Clear(List list) { try { this.Enabled = false; var unitOfWork = IocContainer.UnitOfWork; var repsXl = unitOfWork.Of(); await repsXl.DeleteAsync(list.To>()); await unitOfWork.SaveAsync(); await LoadData(1); return true; } catch (Exception ex) { string msg = "清空星历时异常"; IocContainer.Logger.Error(ex, msg); DxHelper.MsgBoxHelper.ShowError(msg); return false; } finally { this.Enabled = true; } } private async void dataNavigator1_ButtonClick(object sender, NavigatorButtonClickEventArgs e) { if (e.Button.ButtonType == NavigatorButtonType.First) { currentPage = 1; dataNavigator1.Buttons.First.Enabled = false; dataNavigator1.Buttons.PrevPage.Enabled = false; dataNavigator1.Buttons.Last.Enabled = true; dataNavigator1.Buttons.NextPage.Enabled = true; } else if (e.Button.ButtonType == NavigatorButtonType.Last) { currentPage = maxPage; dataNavigator1.Buttons.Last.Enabled = false; dataNavigator1.Buttons.NextPage.Enabled = false; dataNavigator1.Buttons.First.Enabled = true; dataNavigator1.Buttons.PrevPage.Enabled = true; } else if (e.Button.ButtonType == NavigatorButtonType.NextPage) { currentPage++; dataNavigator1.Buttons.First.Enabled = true; dataNavigator1.Buttons.PrevPage.Enabled = true; if (currentPage >= maxPage) { dataNavigator1.Buttons.Last.Enabled = false; dataNavigator1.Buttons.NextPage.Enabled = false; } else { dataNavigator1.Buttons.Last.Enabled = true; dataNavigator1.Buttons.NextPage.Enabled = true; } } else if (e.Button.ButtonType == NavigatorButtonType.PrevPage) { currentPage--; dataNavigator1.Buttons.Last.Enabled = true; dataNavigator1.Buttons.NextPage.Enabled = true; if (currentPage == 1) { dataNavigator1.Buttons.First.Enabled = false; dataNavigator1.Buttons.PrevPage.Enabled = false; } } await LoadPageData(currentPage); dataNavigator1.TextStringFormat = $"第{currentPage}页/共{maxPage}页"; } private async void btnGo_Click(object sender, EventArgs e) { int.TryParse(txtGoPage.Text, out int _currentPage); if (_currentPage > maxPage) { _currentPage = maxPage; } if (_currentPage > 0) { currentPage = _currentPage; if (currentPage == 1 && currentPage < maxPage) { dataNavigator1.Buttons.First.Enabled = false; dataNavigator1.Buttons.PrevPage.Enabled = false; dataNavigator1.Buttons.Last.Enabled = true; dataNavigator1.Buttons.NextPage.Enabled = true; } else if (currentPage == 1 && currentPage == maxPage) { dataNavigator1.Buttons.First.Enabled = false; dataNavigator1.Buttons.PrevPage.Enabled = false; dataNavigator1.Buttons.First.Enabled = false; dataNavigator1.Buttons.PrevPage.Enabled = false; } else if (currentPage == maxPage) { dataNavigator1.Buttons.First.Enabled = true; dataNavigator1.Buttons.PrevPage.Enabled = true; dataNavigator1.Buttons.Last.Enabled = false; dataNavigator1.Buttons.NextPage.Enabled = false; if (dataNavigator1.Position == 0) dataNavigator1.Position = 1; } else { dataNavigator1.Buttons.First.Enabled = true; dataNavigator1.Buttons.PrevPage.Enabled = true; dataNavigator1.Buttons.Last.Enabled = true; dataNavigator1.Buttons.NextPage.Enabled = true; dataNavigator1.Position = 1; } dataNavigator1.TextStringFormat = $"第{currentPage}页/共{maxPage}页"; await LoadPageData(currentPage); } } private async void txtCountPerPage_EditValueChanged(object sender, EventArgs e) { int.TryParse(txtCountPerPage.Text, out int countPerPage); if (countPerPage > 0) { this.maxPage = maxCount / countPerPage; if (maxCount % countPerPage != 0) maxPage++; if (currentPage > maxPage) currentPage = maxPage; if (currentPage == 1 && currentPage < maxPage) { dataNavigator1.Buttons.First.Enabled = false; dataNavigator1.Buttons.PrevPage.Enabled = false; dataNavigator1.Buttons.Last.Enabled = true; dataNavigator1.Buttons.NextPage.Enabled = true; } else if (currentPage == 1 && currentPage == maxPage) { dataNavigator1.Buttons.First.Enabled = false; dataNavigator1.Buttons.PrevPage.Enabled = false; dataNavigator1.Buttons.First.Enabled = false; dataNavigator1.Buttons.PrevPage.Enabled = false; } else if (currentPage == maxPage) { dataNavigator1.Buttons.First.Enabled = true; dataNavigator1.Buttons.PrevPage.Enabled = true; dataNavigator1.Buttons.Last.Enabled = false; dataNavigator1.Buttons.NextPage.Enabled = false; } else { dataNavigator1.Buttons.First.Enabled = true; dataNavigator1.Buttons.PrevPage.Enabled = true; dataNavigator1.Buttons.Last.Enabled = true; dataNavigator1.Buttons.NextPage.Enabled = true; dataNavigator1.Position = 1; } dataNavigator1.TextStringFormat = $"第{currentPage}页/共{maxPage}页"; await LoadPageData(currentPage); } } } }