using DevExpress.XtraEditors; using DevExpress.XtraScheduler; using DxHelper; using ExtensionsDev; using System; using System.Collections.Generic; using System.Data.Entity; using System.Diagnostics; using System.Linq; using System.Threading.Tasks; using System.Windows.Forms; using XdCxRhDW.App.CorTools; using XdCxRhDW.Dto; using XdCxRhDW.Entity; using XdCxRhDW.Repostory; namespace XdCxRhDW.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(); var sat = XlRepository.GetAllSat().Result; txtSat.UseDefault("不限制", true).SetData(sat, nameof(SatInfo.Sat)); } private async void TxtSat_EditValueChanged(object sender, EventArgs e) { var sat = txtSat.EditValue as SatInfo; satCode = sat?.SatCode; this.maxCount = await XlRepository.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) { 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 XlInfo; 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 { this.maxCount = await XlRepository.GetCount(satCode); var countPerPage = Convert.ToInt32(txtCountPerPage.Text); this.maxPage = maxCount / countPerPage; if (maxCount % countPerPage != 0) maxPage++; await LoadPageData(1); } catch (Exception ex) { await LogHelper.Error("加载星历信息异常", ex); DxHelper.MsgBoxHelper.ShowError("加载星历信息异常"); } } private async Task LoadPageData(int currentPage) { var dtResult = await XlRepository.GetPageAsync(currentPage, Convert.ToInt32(txtCountPerPage.Text), satCode); list.Clear(); list.AddRange(dtResult); 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)) { XdCxRhDW.Framework.LogHelper.Warning($"请选择星历文件"); DxHelper.MsgBoxHelper.ShowInfo($"请选择星历文件"); this.layoutControl1.Enabled = true; return; } string file; try { file = await HttpHelper.UploadFileAsync(btnOpen.Text, SysConfig.GetBaseUrl()); } catch (Exception ex) { layoutControl1.Enabled = true; XdCxRhDW.Framework.LogHelper.Error(ex.Message, ex); DxHelper.MsgBoxHelper.ShowError(ex.Message); return; } try { XlImportDto dto = new XlImportDto() { File = file }; var result = await HttpHelper.PostRequestAsync(SysConfig.GetUrl("Xl/ImportTleAsync"), dto); if (result.code == 200) { DxHelper.MsgBoxHelper.ShowInfo($"星历导入成功.共导入{result.data.Count}条"); await LoadData(1); } else { XdCxRhDW.Framework.LogHelper.Error(result.msg); DxHelper.MsgBoxHelper.ShowError($"星历导入失败,{result.msg}!"); } } catch (TaskCanceledException) { XdCxRhDW.Framework.LogHelper.Warning($"星历导入超时"); DxHelper.MsgBoxHelper.ShowInfo($"星历导入超时"); return; } catch (Exception ex) { XdCxRhDW.Framework.LogHelper.Error("星历导入异常", ex); } this.layoutControl1.Enabled = true; } private async Task Del(List list) { try { this.Enabled = false; var ids = list.Select(p => p.ID); using (RHDWContext db = new RHDWContext()) { var delItems = await db.XlInfos.Where(p => ids.Contains(p.ID)).ToListAsync(); db.XlInfos.RemoveRange(delItems); await db.SaveChangesAsync(); } await LoadData(1); return true; } catch (Exception ex) { XdCxRhDW.Framework.LogHelper.Error("删除选中的星历时异常", ex); DxHelper.MsgBoxHelper.ShowError("删除选中的星历时异常"); return false; } finally { this.Enabled = true; } } private async Task Clear(List list) { try { this.Enabled = false; using (RHDWContext db = new RHDWContext()) { if (satCode == null) { db.XlInfos.RemoveRange(db.XlInfos); } else { db.XlInfos.RemoveRange(db.XlInfos.Where(p => p.SatCode == satCode.Value)); } await db.SaveChangesAsync(); } await LoadData(1); return true; } catch (Exception ex) { XdCxRhDW.Framework.LogHelper.Error("清空星历时异常", ex); DxHelper.MsgBoxHelper.ShowError("清空星历时异常"); 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); } } } }