zoulei 1 год назад
Родитель
Сommit
97d6d9ddde

+ 169 - 0
XdCxRhDW.Api/AddIns/GDOP误差椭圆/GDOP.h

@@ -32,6 +32,25 @@ extern "C"
 		, double dtousErr, double ephLocErr
 		, double *level, int levlen, int *resCount, double **res, double *satllh);
 
+	///
+	/// 获取三星双时差GDOP  带参考
+	/// mainxyz :xyz vx vy vz
+	/// adaj1xyz :xyz vx vy vz 
+	/// adaj2xyz :xyz vx vy vz 
+	/// refPos: 参考经度,纬度
+	/// dtousErr: 时差误差
+	/// ephLocErr: 星历位置误差
+	/// level: gdop输出等级
+	/// levlen:level 长度
+	/// resCount:每一级的数据个数
+	/// res :数据
+	/// satllh :卫星位置
+	/// 返回值:0 成功
+	///
+	GDOP_EXPORT int Gdop3SatRefByXyz(double *mainxyz, double *adaj1xyz, double *adaj2xyz, double *refPos
+		, double dtousErr, double ephLocErr
+		, double *level, int levlen, int *resCount, double **res, double *satllh);
+
 	///
 	/// 获取三星双时差GDOP  无参考
 	/// mainLines :主星历双行
@@ -51,6 +70,24 @@ extern "C"
 		, double dtousErr, double ephLocErr
 		, double *level, int levlen, int *resCount, double **res, double *satllh);
 
+	///
+	/// 获取三星双时差GDOP  无参考
+	/// mainxyz :xyz vx vy vz
+	/// adaj1xyz :xyz vx vy vz 
+	/// adaj2xyz :xyz vx vy vz 
+	/// dtousErr: 时差误差
+	/// ephLocErr: 星历位置误差
+	/// level: gdop输出等级
+	/// levlen:level 长度
+	/// resCount:每一级的数据个数
+	/// res :数据
+	/// satllh :卫星位置
+	/// 返回值:0 成功
+	///
+	GDOP_EXPORT int Gdop3SatNoRefByXyz(double *mainxyz, double *adaj1xyz, double *adaj2xyz
+		, double dtousErr, double ephLocErr
+		, double *level, int levlen, int *resCount, double **res, double *satllh);
+
 	///
 	/// 获取双星GDOP
 	/// mainLines :主星历双行
@@ -74,6 +111,28 @@ extern "C"
 		, double fuHz1, double fuHz2, double dtousErr, double dfoHzErr, double ephLocErr, double ephVLocErr
 		, double *level, int levlen, int *resCount, double **res, double *satllh);
 
+	///
+	/// 获取双星GDOP
+	/// mainxyz :xyz vx vy vz
+	/// adajxyz :xyz vx vy vz 
+	/// refPos: 参考经度,纬度
+	/// fuHz1: 主上行
+	/// fuHz2: 邻上行
+	/// dtousErr: 时差误差
+	/// dfoHzErr: 频差误差
+	/// ephLocErr: 星历位置误差
+	/// ephVLocErr: 星历速度误差
+	/// level: gdop输出等级
+	/// levlen:level 长度
+	/// resCount:每一级的数据个数
+	/// res :数据
+	/// satllh :卫星位置
+	/// 返回值:0 成功
+	///
+	GDOP_EXPORT int Gdop2SatDRefByXyz(double *mainxyz, double *adajxyz, double *refPos
+		, double fuHz1, double fuHz2, double dtousErr, double dfoHzErr, double ephLocErr, double ephVLocErr
+		, double *level, int levlen, int *resCount, double **res, double *satllh);
+
 	///
 	/// 获取三星双频差GDOP
 	/// mainLines :主星历双行
@@ -97,6 +156,28 @@ extern "C"
 		, double fuHz1, double fuHz2, double dfo_err, double eph_pos_err, double eph_vel_err
 		, double *level, int levlen, int *resCount, double **res, double *satllh);
 
+	///
+	/// 获取三星双频差GDOP
+	/// mainxyz :xyz vx vy vz
+	/// adaj1xyz :xyz vx vy vz 
+	/// adaj2xyz :xyz vx vy vz 
+	/// refPos: 参考经度,纬度
+	/// fuHz1: 主上行
+	/// fuHz2: 邻上行
+	/// dfo_err: 频差误差
+	/// eph_pos_err: 星历位置误差
+	/// eph_vel_err: 星历速度误差
+	/// level: gdop输出等级
+	/// levlen:level 长度
+	/// resCount:每一级的数据个数
+	/// res :数据
+	/// satllh :卫星位置
+	/// 返回值:0 成功
+	///
+	GDOP_EXPORT int Gdop3SatDFByXyz(double *mainxyz, double *adaj1xyz, double *adaj2xyz, double *refPos
+		, double fuHz1, double fuHz2, double dfo_err, double eph_pos_err, double eph_vel_err
+		, double *level, int levlen, int *resCount, double **res, double *satllh);
+
 	///
 	/// 获取2X1D GDOP
 	/// mainLines :主星历双行
@@ -117,6 +198,25 @@ extern "C"
 		, double *refPos, double dtousErr, double ephLocErr
 		, double *level, int levlen, int *resCount, double **res, double *satllh);
 
+	///
+	/// 获取2X1D GDOP
+	/// mainxyz :xyz vx vy vz
+	/// adajxyz :xyz vx vy vz 
+	/// cdbPos: 地面站经度,纬度
+	/// refPos: 参考经度,纬度
+	/// dtousErr: 时差误差
+	/// ephLocErr: 星历位置误差
+	/// level: gdop输出等级
+	/// levlen:level 长度
+	/// resCount:每一级的数据个数
+	/// res :数据
+	/// satllh :卫星位置  长度6
+	/// 返回值:0 成功
+	///
+	GDOP_EXPORT int Gdop2Sat1DRefByXyz(double *mainxyz, double *adajxyz, double *cdbPos
+		, double *refPos, double dtousErr, double ephLocErr
+		, double *level, int levlen, int *resCount, double **res, double *satllh);
+
 
 	///
 	/// 获取2X1D no ref GDOP
@@ -137,6 +237,24 @@ extern "C"
 		, double dtousErr, double ephLocErr
 		, double *level, int levlen, int *resCount, double **res, double *satllh);
 
+	///
+	/// 获取2X1D no ref GDOP
+	/// mainxyz :xyz vx vy vz
+	/// adajxyz :xyz vx vy vz 
+	/// cdbPos: 地面站经度,纬度
+	/// dtousErr: 时差误差
+	/// ephLocErr: 星历位置误差
+	/// level: gdop输出等级
+	/// levlen:level 长度
+	/// resCount:每一级的数据个数
+	/// res :数据
+	/// satllh :卫星位置  长度6
+	/// 返回值:0 成功
+	///
+	GDOP_EXPORT int Gdop2Sat1DNoRefByXyz(double *mainxyz, double *adajxyz, double *cdbPos
+		, double dtousErr, double ephLocErr
+		, double *level, int levlen, int *resCount, double **res, double *satllh);
+
 	///
 	/// 获取XD_CX ref GDOP
 	/// mainLines :主星历双行
@@ -158,6 +276,26 @@ extern "C"
 		, double dto_err, double doa_err, double eph_err
 		, double *level, int levlen, int *resCount, double **res, double *satllh);
 
+	///
+	/// 获取XD_CX ref GDOP
+	/// mainxyz :xyz vx vy vz
+	/// cdbPos: 地面站经度,纬度
+	/// cxPos: 侧向站经度,纬度
+	/// refPos: 参考经度,纬度
+	/// dto_err: 时差误差
+	/// doa_err: 侧向误差
+	/// eph_err: 星历位置误差
+	/// level: gdop输出等级
+	/// levlen:level 长度
+	/// resCount:每一级的数据个数
+	/// res :数据
+	/// satllh :卫星位置  长度6
+	/// 返回值:0 成功
+	///
+	GDOP_EXPORT int GdopXDCXRefByXyz(double *mainxyz, double *cdbPos, double *cxPos, double *refPos
+		, double dto_err, double doa_err, double eph_err
+		, double *level, int levlen, int *resCount, double **res, double *satllh);
+
 	///
 	/// 获取XD_CX no ref GDOP
 	/// mainLines :主星历双行
@@ -179,6 +317,26 @@ extern "C"
 		, double dto_err, double doa_err, double eph_err
 		, double *level, int levlen, int *resCount, double **res, double *satllh);
 
+	///
+	/// 获取XD_CX no ref GDOP
+	/// mainxyz :xyz vx vy vz
+	/// cdbPos: 地面站经度,纬度
+	/// cxPos: 侧向站经度,纬度
+	/// refPos: 参考经度,纬度
+	/// dto_err: 时差误差
+	/// doa_err: 侧向误差
+	/// eph_err: 星历位置误差
+	/// level: gdop输出等级
+	/// levlen:level 长度
+	/// resCount:每一级的数据个数
+	/// res :数据
+	/// satllh :卫星位置  长度6
+	/// 返回值:0 成功
+	///
+	GDOP_EXPORT int GdopXDCXNoRefByXyz(double *mainxyz, double *cdbPos, double *cxPos
+		, double dto_err, double doa_err, double eph_err
+		, double *level, int levlen, int *resCount, double **res, double *satllh);
+
 	///
 	/// 获取XD_CX no ref GDOP
 	/// cx1Pos: 侧向站经度,纬度
@@ -196,6 +354,17 @@ extern "C"
 		, double doa_err1, double doa_err2
 		, double *level, int levlen, int *resCount, double **res);
 
+	//
+	// 计算理论频差
+	//tarpos  目标位置
+	//recpos  接收站位置
+	//eph1 星历 x y z vx vy vz
+	//eph2 星历 x y z vx vy vz
+	//fu  上行
+	//fd  下行
+	//
+	GDOP_EXPORT double theryDfo(double *tarpos, double *recpos, double *eph1, double *eph2, double fu, double fd);
+
 	///
 	/// 释放
 	///

BIN
XdCxRhDW.Api/AddIns/GDOP误差椭圆/GDOP_Draw_11.dll


+ 9 - 12
XdCxRhDW.App/CorTools/DetectToolForm.cs

@@ -27,26 +27,27 @@ namespace XdCxRhDW.App.CorTools
         public DetectToolForm()
         {
             InitializeComponent();
-            this.gcCheckCgRes.Init<CafResult>();
+            this.gcCheckCgRes.UseDefault(gridSource);
             txtFileTime.UseDefault().UseDoubleClickToSelectAll();
         }
 
         private async void MainForm_Load(object sender, EventArgs e)
         {
             layoutControl1.BestFit();
-            this.gcCheckCgRes.UseExportXlsx().UseRowNumber().UseFilter()
+            this.gcCheckCgRes.UseRowNumber()
                 .UseExportCsv()
-                .AddMenu("时隙参估", SvgHelper.CreateSlotCg(), async () =>
+                .UseExportXlsx()
+                .AddContentMenu<CafResult>("时隙参估", SvgHelper.CreateSlotCg(), async data =>
                 {
                     layoutControl1.Enabled = false;
-                    gridSource.ForEach(t =>
+                    data.ForEach(t =>
                     {
                         t.dt = null;
                         t.df = null;
                         t.snr = null;
                     });
                     gridView1.RefreshData();
-                    foreach (var item in gridSource)
+                    foreach (var item in data)
                     {
                         string file1 = null, file2 = null;
                         try
@@ -117,13 +118,9 @@ namespace XdCxRhDW.App.CorTools
                         }
                     }
                     layoutControl1.Enabled = true;
-                })
-                .AddMenu("清除表格", SvgHelper.CreateClear(), () =>
-                {
-                    gridSource.Clear();
-                    gridView1.RefreshData();
-                }).DataSource = gridSource;
-            this.btnFile1.UseChooseFile((file, fsHz) =>
+                },false)
+                .UseClear<CafResult>(menuCaption:"清除表格");
+            this.btnFile1.UseChooseWaveFile((file, fsHz) =>
             {
                 if (fsHz > 0)
                     tefs.Text = (fsHz / 1e6).ToString();

+ 3 - 8
XdCxRhDW.App/CorTools/GpuCalcForm.cs

@@ -37,14 +37,9 @@ namespace XdCxRhDW.App.CorTools
 
         private async void MainForm_Load(object sender, EventArgs e)
         {
-            this.gridGpuCg.Init<CafResult>().UseExportXlsx().UseRowNumber().UseFilter()
-                .UseExportCsv()
-                .AddMenu("清除表格", SvgHelper.CreateClear(), () =>
-                {
-                    gridSource.Clear();
-                    gridView1.RefreshData();
-                }).DataSource = gridSource;
-            this.btnFile1.UseChooseFile((file, fsHz) =>
+            this.gridGpuCg.UseDefault(gridSource).UseExportXlsx().UseRowNumber()
+                .UseExportCsv().UseClear<GpuCafResult>();
+            this.btnFile1.UseChooseWaveFile((file, fsHz) =>
             {
                 if (fsHz > 0)
                     txtfs.Text = (fsHz / 1e6).ToString();

+ 1 - 1
XdCxRhDW.App/CorTools/ResampleForm.cs

@@ -26,7 +26,7 @@ namespace XdCxRhDW.App.CorTools
         {
             InitializeComponent();
             txtOutFile.Text = "";
-            txtFile.UseChooseFile((file, fsHz) =>
+            txtFile.UseChooseWaveFile((file, fsHz) =>
             {
                 this.txtOutDir.Text = Path.GetDirectoryName(file);
                 if (fsHz > 0)

+ 1 - 2
XdCxRhDW.App/CorTools/XlCalculateForm.cs

@@ -23,7 +23,6 @@ namespace XdCxRhDW.App.CorTools
 {
     public partial class XlCalculateForm : DevExpress.XtraEditors.XtraForm
     {
-        List<string> resXl = new List<string>();
         List<ModelSatEphRes> listEph = new List<ModelSatEphRes>();
         public XlCalculateForm()
         {
@@ -31,7 +30,7 @@ namespace XdCxRhDW.App.CorTools
         }
         private async void XlCalculateForm_Load(object sender, EventArgs e)
         {
-            gridControl.Init<ModelSatEphRes>().UseSort().UseFilter().UseMultiSelect().UseRowNumber().DataSource = listEph;
+            gridControl.UseDefault(listEph).UseMultiSelect().UseRowNumber();
             txtTle.UseDoubleClickToSelectAll();
             txtTle.UseDefault().SetData(await XlRepository.GetAllAsync(), nameof(XlInfo.TwoLine));
         }

+ 6 - 0
XdCxRhDW.App/DxHelper/MsgBoxHelper.cs

@@ -22,6 +22,12 @@ namespace DxHelper
         {
             XtraMessageBox.Show(msg, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
         }
+
+        /// <summary>
+        /// 显示确认消息(是=true,否=false)
+        /// </summary>
+        /// <param name="msg"></param>
+        /// <returns></returns>
         public static bool ShowConfirm(string msg)
         {
             var result = XtraMessageBox.Show(msg, "确认", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

Разница между файлами не показана из-за своего большого размера
+ 93 - 4
XdCxRhDW.App/DxHelper/SvgHelper.cs


+ 23 - 1
XdCxRhDW.App/ExtensionsDev/ChooseFileExtension.cs

@@ -11,7 +11,14 @@ namespace ExtensionsDev
 {
     public static class ChooseFileExtension
     {
-        public static ButtonEdit UseChooseFile(this ButtonEdit ctrl, Action<string, int> onFileChanged = null)
+
+        /// <summary>
+        /// 使用选择Wave文件的功能
+        /// </summary>
+        /// <param name="ctrl">ButtonEdit控件</param>
+        /// <param name="onFileChanged">文件改变事件,参数为选择的文件和文件的采样率Hz</param>
+        /// <returns></returns>
+        public static ButtonEdit UseChooseWaveFile(this ButtonEdit ctrl, Action<string, int> onFileChanged = null)
         {
             ctrl.AllowDrop = true;
             ctrl.DragEnter += ctrl_DragEnter;
@@ -47,6 +54,21 @@ namespace ExtensionsDev
             ctrl.Tag = nameof(UseChooseFile);
             return ctrl;
         }
+
+        /// <summary>
+        /// 使用通用文件选择功能
+        /// </summary>
+        /// <param name="ctrl">ButtonEdit控件</param>
+        /// <returns></returns>
+        public static ButtonEdit UseChooseFile(this ButtonEdit ctrl)
+        {
+            ctrl.AllowDrop = true;
+            ctrl.DragEnter += ctrl_DragEnter;
+            ctrl.DragDrop += ctrl_DragDrop;
+            ctrl.ButtonClick += Ctrl_ButtonClick;
+            ctrl.Tag = nameof(UseChooseFile);
+            return ctrl;
+        }
         public static ButtonEdit UseChooseDir(this ButtonEdit ctrl)
         {
             ctrl.UseChooseFile();

+ 414 - 69
XdCxRhDW.App/ExtensionsDev/GridControlEx.cs

@@ -7,19 +7,16 @@ using DevExpress.XtraEditors.Controls;
 using DevExpress.XtraGrid;
 using DevExpress.XtraGrid.Columns;
 using DevExpress.XtraGrid.Views.Grid;
-using DevExpress.XtraGrid.Views.Tile;
+using DxHelper;
 using System;
 using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations;
 using System.Drawing;
 using System.IO;
 using System.Linq;
-using System.Reflection;
-using System.Runtime.CompilerServices;
 using System.Text;
-using System.Threading;
 using System.Threading.Tasks;
 using System.Windows.Forms;
+using static System.Windows.Forms.VisualStyles.VisualStyleElement.ListView;
 public static class GridControlEx
 {
     class GridTag
@@ -30,17 +27,17 @@ public static class GridControlEx
         public BarManager BarM { get; set; }
     }
     /// <summary>
-    /// <para>初始化表格</para>
-    /// <para>禁用列菜单、排序、分组、过滤、列拖动等</para>
+    /// 初始化表格(默认禁用分组)
     /// </summary>
     /// <param name="grid"></param>
-    /// <param name="rowHeight"></param>
-    /// <param name="showScrollH"></param>
+    /// <param name="dataSource">绑定的数据源</param>
+    /// <param name="rowHeight">行高(默认24px)</param>
+    /// <param name="showScrollH">是否显示水平滚动条(默认不显示)</param>
     /// <typeparam name="T">绑定的数据源模型类型</typeparam>
-    /// <param name="searchLookUpEdit">searchLookUpEditd控件</param>
     /// <returns></returns>
-    public static GridControl Init<T>(this GridControl grid, int rowHeight = 24, bool showScrollH = false, Control searchLookUpEdit = null)
+    public static GridControl UseDefault<T>(this GridControl grid,List<T> dataSource, int rowHeight = 24, bool showScrollH = false)
     {
+        grid.DataSource = dataSource;
         grid.MainView.BorderStyle = BorderStyles.Flat;
         var view = grid.MainView as GridView;
         view.CustomColumnDisplayText += View_CustomColumnDisplayText;
@@ -57,9 +54,9 @@ public static class GridControlEx
         view.OptionsView.ShowIndicator = false;
 
         view.OptionsMenu.EnableColumnMenu = true;
-        view.OptionsCustomization.AllowFilter = false;
+        view.OptionsCustomization.AllowFilter = true;
         view.OptionsCustomization.AllowGroup = false;
-        view.OptionsCustomization.AllowSort = false;
+        view.OptionsCustomization.AllowSort = true;
         view.OptionsCustomization.AllowColumnMoving = true;
         view.OptionsCustomization.AllowMergedGrouping = DefaultBoolean.False;
         view.OptionsSelection.MultiSelect = false;
@@ -75,11 +72,12 @@ public static class GridControlEx
         view.OptionsLayout.StoreFormatRules = true;
         view.OptionsView.ColumnAutoWidth = !showScrollH;
         view.PopupMenuShowing += View_PopupMenuShowing;
+
         view.OptionsSelection.EnableAppearanceFocusedCell = false;
         string GetLayoutName()
         {
             Control ctrl;
-            if (searchLookUpEdit != null)
+            if (view.Tag is SearchLookUpEdit searchLookUpEdit)
                 ctrl = searchLookUpEdit;
             else
                 ctrl = grid;
@@ -95,8 +93,8 @@ public static class GridControlEx
                 sb.Append(item.Name);
             }
             var md5 = MD5Helper.StrToMD5(sb.ToString());
-            if (searchLookUpEdit != null)
-                return $"{ctrl.Name}_{searchLookUpEdit.Name}_{md5}";
+            if (view.Tag is SearchLookUpEdit searchLookUpEdit2)
+                return $"{ctrl.Name}_{searchLookUpEdit2.Name}_{md5}";
             else
                 return $"{ctrl.Name}_{grid.Name}_{md5}";
         }
@@ -104,10 +102,11 @@ public static class GridControlEx
         void SaveLayoutAction()
         {
             Form frm = null;
-            if (searchLookUpEdit == null)
-                frm = grid.FindForm();
+            if (view.Tag is SearchLookUpEdit edit)
+                frm = edit.FindForm();
             else
-                frm = searchLookUpEdit.FindForm();
+                frm = grid.FindForm();
+
             if (frm != null)
             {
                 frm.VisibleChanged += (sender2, e2) =>
@@ -136,6 +135,230 @@ public static class GridControlEx
         return grid;
     }
 
+    /// <summary>
+    /// 为GirdControl启用右键新增数据的功能
+    /// </summary>
+    /// <typeparam name="T"></typeparam>
+    /// <param name="grid"></param>
+    /// <param name="menuCaption"></param>
+    /// <param name="callback">一个回调函数,返回新增的数据</param>
+    /// <returns></returns>
+    public static GridControl UseAdd<T>(this GridControl grid, Func<T> callback, string menuCaption = "新增")
+    {
+        var view = grid.MainView as GridView;
+        view.CustomDrawEmptyForeground += (sender, e) =>
+        {
+            string emptyText = "右键添加";
+            var s = e.Appearance.CalcTextSize(e.Cache, emptyText, e.Bounds.Width).ToSize();
+            var x = (e.Bounds.Width - s.Width) / 2;
+            var y = (e.Bounds.Height - s.Height) / 2;
+            e.Appearance.ForeColor = Color.Gray;
+            e.Appearance.DrawString(e.Cache, emptyText, new Rectangle(x, y, s.Width, s.Height));
+        };
+        grid.AddContentMenu<T>(menuCaption, DxHelper.SvgHelper.CreateAdd(), data =>
+        {
+            if (callback != null)
+            {
+                var addRow = callback();
+                if (addRow == null) return;
+                var ds = grid.DataSource as List<T>;
+                ds.Add(addRow);
+                view.RefreshData();
+            }
+
+        }, true);
+        return grid;
+    }
+
+    /// <summary>
+    /// 为GirdControl启用右键新增数据的功能
+    /// </summary>
+    /// <typeparam name="T"></typeparam>
+    /// <param name="grid"></param>
+    /// <param name="menuCaption"></param>
+    /// <param name="callback">一个回调函数,返回新增的数据</param>
+    /// <returns></returns>
+    public static GridControl UseAddAsync<T>(this GridControl grid, Func<Task<T>> callback, string menuCaption = "新增")
+    {
+        grid.AddContentMenu<T>(menuCaption, DxHelper.SvgHelper.CreateAdd(), async data =>
+        {
+            if (callback != null)
+            {
+                var addRow = await callback();
+                if (addRow == null) return;
+                var view = grid.MainView as GridView;
+                var ds = grid.DataSource as List<T>;
+                ds.Add(addRow);
+                view.RefreshData();
+            }
+
+        }, true);
+        return grid;
+    }
+
+    /// <summary>
+    /// 为GridControl启用右编辑选中的单行功能
+    /// </summary>
+    /// <typeparam name="T"></typeparam>
+    /// <param name="grid"></param>
+    /// <param name="menuCaption"></param>
+    /// <param name="callback"></param>
+    /// <returns></returns>
+    public static GridControl UseEdit<T>(this GridControl grid, Func<T, T> callback, string menuCaption = "编辑")
+    {
+        grid.AddRowMenu<T>(menuCaption, DxHelper.SvgHelper.CreateEdit(), data =>
+        {
+            if (callback != null)
+            {
+                var newRow = callback(data);
+                if (newRow == null) return;
+                var view = grid.MainView as GridView;
+                var ds = grid.DataSource as List<T>;
+                var idx = ds.IndexOf(data);
+                ds.Remove(data);
+                ds.Insert(idx, newRow);
+                view.RefreshData();
+            }
+
+        }, null);
+        return grid;
+    }
+
+    /// <summary>
+    /// 为GridControl启用右编辑选中的单行功能
+    /// </summary>
+    /// <typeparam name="T"></typeparam>
+    /// <param name="grid"></param>
+    /// <param name="menuCaption"></param>
+    /// <param name="callback"></param>
+    /// <returns></returns>
+    public static GridControl UseEditAsync<T>(this GridControl grid, Func<T, Task<T>> callback, string menuCaption = "编辑")
+    {
+        grid.AddRowMenu<T>(menuCaption, DxHelper.SvgHelper.CreateEdit(), async data =>
+        {
+            if (callback != null)
+            {
+                var newRow = await callback(data);
+                if (newRow == null) return;
+                var view = grid.MainView as GridView;
+                var ds = grid.DataSource as List<T>;
+                var idx = ds.IndexOf(data);
+                ds.Remove(data);
+                ds.Insert(idx, newRow);
+                view.RefreshData();
+            }
+
+        }, null);
+        return grid;
+    }
+
+    /// <summary>
+    /// 为GridControl启用右删除选中的一行或多行功能(自动启用UseMultiSelect)
+    /// </summary>
+    /// <typeparam name="T"></typeparam>
+    /// <param name="grid"></param>
+    /// <param name="menuCaption"></param>
+    /// <param name="action"></param>
+    /// <returns></returns>
+    public static GridControl UseDelete<T>(this GridControl grid, Func<List<T>, bool> action = null, string menuCaption = "删除")
+    {
+        grid.AddMultRowMenu<T>(menuCaption, DxHelper.SvgHelper.CreateClose(), data =>
+        {
+            if (!DxHelper.MsgBoxHelper.ShowConfirm($"确认删除选中的记录?共[{data.Count}]条")) return;
+            if (action != null)
+            {
+                bool succeed = action(data);
+                if (!succeed) return;
+            }
+            var view = grid.MainView as GridView;
+            view.DeleteSelectedRows();
+            view.RefreshData();
+
+        });
+        return grid;
+    }
+
+    /// <summary>
+    /// 为GridControl启用右删除选中的一行或多行功能(自动启用UseMultiSelect)
+    /// </summary>
+    /// <typeparam name="T"></typeparam>
+    /// <param name="grid"></param>
+    /// <param name="menuCaption"></param>
+    /// <param name="action"></param>
+    /// <returns></returns>
+    public static GridControl UseDeleteAsync<T>(this GridControl grid, Func<List<T>, Task<bool>> action = null, string menuCaption = "删除")
+    {
+        grid.AddMultRowMenu<T>(menuCaption, DxHelper.SvgHelper.CreateClose(), async data =>
+        {
+            if (!DxHelper.MsgBoxHelper.ShowConfirm($"确认删除选中的记录?共[{data.Count()}]条")) return;
+            if (action != null)
+            {
+                bool succeed = await action(data);
+                if (!succeed) return;
+            }
+            var view = grid.MainView as GridView;
+            view.DeleteSelectedRows();
+            view.RefreshData();
+
+        });
+        return grid;
+    }
+
+    /// <summary>
+    /// 为GirdControl启用右键清除所有数据的功能(action执行完成后会自动清空表格中对应的数据)
+    /// </summary>
+    /// <typeparam name="T"></typeparam>
+    /// <param name="grid"></param>
+    /// <param name="menuCaption"></param>
+    /// <param name="action"></param>
+    /// <param name="existMenu"></param>
+    /// <returns></returns>
+    public static GridControl UseClear<T>(this GridControl grid, Func<List<T>, bool> action = null, string menuCaption = "清除")
+    {
+        grid.AddContentMenu<T>(menuCaption, DxHelper.SvgHelper.CreateClear(), data =>
+        {
+            if (data == null || data.Count == 0) return;
+            if (!DxHelper.MsgBoxHelper.ShowConfirm($"确认清空所有记录?共[{data.Count}]条")) return;
+            if (action != null)
+            {
+                bool succeed = action(data);
+                if (!succeed) return;
+            }
+            var view = grid.MainView as GridView;
+            data.Clear();
+            view.RefreshData();
+
+        }, false);
+        return grid;
+    }
+
+    /// <summary>
+    /// 为GirdControl启用右键清除所有数据的功能(action执行完成后会自动清空表格中对应的数据)
+    /// </summary>
+    /// <typeparam name="T"></typeparam>
+    /// <param name="grid"></param>
+    /// <param name="menuCaption"></param>
+    /// <param name="action"></param>
+    /// <param name="existMenu"></param>
+    /// <returns></returns>
+    public static GridControl UseClearAsync<T>(this GridControl grid, Func<List<T>, Task<bool>> action = null, string menuCaption = "清除")
+    {
+        grid.AddContentMenu<T>(menuCaption, DxHelper.SvgHelper.CreateClear(), async data =>
+        {
+            if (data == null || data.Count == 0) return;
+            if (!DxHelper.MsgBoxHelper.ShowConfirm($"确认清空所有记录?共[{data.Count}]条")) return;
+            if (action != null)
+            {
+                bool succeed = await action(data);
+                if (!succeed) return;
+            }
+            var view = grid.MainView as GridView;
+            data.Clear();
+            view.RefreshData();
+
+        }, false);
+        return grid;
+    }
 
     public static GridControl UseExportCsv(this GridControl grid)
     {
@@ -170,6 +393,7 @@ public static class GridControlEx
         tag.PopupMenu = popupMenu;
         return grid;
     }
+
     public static GridControl UseExportXlsx(this GridControl grid)
     {
         GridTag tag = grid.Tag as GridTag;
@@ -246,13 +470,6 @@ public static class GridControlEx
         view.OptionsSelection.MultiSelectMode = GridMultiSelectMode.RowSelect;
         return grid;
     }
-    public static GridControl UseSort(this GridControl grid)
-    {
-        var view = grid.MainView as GridView;
-        view.OptionsCustomization.AllowSort = true;
-        return grid;
-    }
-
     public static GridControl UseGroup(this GridControl grid)
     {
         var view = grid.MainView as GridView;
@@ -271,12 +488,6 @@ public static class GridControlEx
         return grid;
 
     }
-    public static GridControl UseFilter(this GridControl grid)
-    {
-        var view = grid.MainView as GridView;
-        view.OptionsCustomization.AllowFilter = true;
-        return grid;
-    }
     public static GridControl UseEdit(this GridControl grid)
     {
         var view = grid.MainView as GridView;
@@ -319,8 +530,6 @@ public static class GridControlEx
         return grid;
 
     }
-
-
     public static GridControl HideColumn(this GridControl grid, params string[] colField)
     {
 
@@ -333,59 +542,153 @@ public static class GridControlEx
         }
         return grid;
     }
-    private static void View_PopupMenuShowing(object sender, PopupMenuShowingEventArgs e)
+
+
+    /// <summary>
+    /// GridControl添加单行元素选择后的右键菜单(没有选中的数据或showCondition返回false时不会显示此菜单按钮)
+    /// </summary>
+    /// <typeparam name="T">GridControl绑定数据源的泛型类型</typeparam>
+    /// <param name="grid">GridControl控件</param>
+    /// <param name="menuText">菜单标题</param>
+    /// <param name="meunImage">菜单图标</param>
+    /// <param name="action">菜单要执行的事件,参数为选中的单行元素</param>
+    /// <param name="showCondition">菜单显示的条件</param>
+    /// <returns></returns>
+    public static GridControl AddRowMenu<T>(this GridControl grid, string menuText, SvgImage meunImage,
+        Action<T> action, Func<T, bool> showCondition = null)
     {
-        if (e.Menu != null)
+        GridTag tag = grid.Tag as GridTag;
+        var view = grid.MainView as GridView;
+
+        if (tag.BarM == null)
         {
-            foreach (DXMenuItem item in e.Menu.Items)
-            {
-                if (!item.Enabled)
-                {
-                    item.Visible = false;
-                    continue;
-                }
-            }
+            tag.BarM = new BarManager();
+            tag.BarM.Form = grid;
         }
-        if (e.HitInfo.HitTest == DevExpress.XtraGrid.Views.Grid.ViewInfo.GridHitTest.EmptyRow)
+        if (tag.PopupMenu == null)
         {
-            return;
+            tag.PopupMenu = new PopupMenu();
         }
-        var view = sender as GridView;
-        var grid = view.GridControl;
-        var p = grid.PointToScreen(e.Point);
-        var tag = grid.Tag as GridTag;
-        tag?.PopupMenu?.ShowPopup(p);
+        var popupMenu = tag.PopupMenu;
+        BarButtonItem item = new BarButtonItem();
+        Func<bool> showConditionAll = () =>
+        {
+            if (!view.GetSelectedRows().Any()) return false;
+            if (showCondition == null)
+                return true;
+            else
+                return showCondition((T)view.GetFocusedRow());
+        };
+        item.Tag = showConditionAll;
+        item.ItemClick += (sender, e) =>
+        {
+            if (action != null)
+            {
+                if (view.GetFocusedRow() == null) return;
+                item.Enabled = false;
+                action.Invoke((T)view.GetFocusedRow());
+                item.Enabled = true;
+            }
+        };
+        item.ImageOptions.SvgImage = meunImage;
+        item.Caption = menuText;
+        tag.BarM.Items.Add(item);
+        popupMenu.AddItem(item);
+        popupMenu.Manager = tag.BarM;
+        tag.PopupMenu = popupMenu;
+        return grid;
     }
 
-    public static GridControl AddMenu(this GridControl grid, string menuText, SvgImage meunImage, Action onClick, PopupMenu existMenu = null)
+
+    /// <summary>
+    /// GridControl添加多行选择元素的右键菜单(没有选中的数据时不会显示此菜单按钮)
+    /// </summary>
+    /// <typeparam name="T">GridControl绑定数据源的泛型类型</typeparam>
+    /// <param name="grid">GridControl控件</param>
+    /// <param name="menuText">菜单标题</param>
+    /// <param name="meunImage">菜单图标</param>
+    /// <param name="action">菜单要执行的事件,参数为选中的一行或多行元素</param>
+    /// <returns></returns>
+    public static GridControl AddMultRowMenu<T>(this GridControl grid, string menuText, SvgImage meunImage,
+        Action<List<T>> action)
     {
+        grid.UseMultiSelect();
         GridTag tag = grid.Tag as GridTag;
-        PopupMenu popupMenu;
-        if (existMenu == null)
+        var view = grid.MainView as GridView;
+        if (tag.BarM == null)
         {
-            if (tag.BarM == null)
-            {
-                tag.BarM = new BarManager();
-                tag.BarM.Form = grid;
-            }
-            if (tag.PopupMenu == null)
+            tag.BarM = new BarManager();
+            tag.BarM.Form = grid;
+        }
+        if (tag.PopupMenu == null)
+        {
+            tag.PopupMenu = new PopupMenu();
+        }
+        var popupMenu = tag.PopupMenu;
+        BarButtonItem item = new BarButtonItem();
+        item.ItemClick += (sender, e) =>
+        {
+            if (action != null)
             {
-                tag.PopupMenu = new PopupMenu();
+                var rows = view.GetSelectedRows();
+                List<T> list = new List<T>();
+                foreach (var row in rows)
+                {
+                    if (row < 0) continue;
+                    list.Add((T)view.GetRow(row));
+                }
+                if (list.Any())
+                    action.Invoke(list);
             }
-            popupMenu = tag.PopupMenu;
+        };
+        item.ImageOptions.SvgImage = meunImage;
+        item.Caption = menuText;
+        Func<bool> showCondition = () => view.GetSelectedRows().Any();
+        item.Tag = showCondition;
+        tag.BarM.Items.Add(item);
+        popupMenu.AddItem(item);
+        popupMenu.Manager = tag.BarM;
+        tag.PopupMenu = popupMenu;
+        return grid;
+    }
+
+    /// <summary>
+    /// GridControl添加内容区的右键菜单
+    /// </summary>
+    /// <typeparam name="T">GridControl绑定数据源的泛型类型</typeparam>
+    /// <param name="grid">GridControl控件</param>
+    /// <param name="menuText">菜单标题</param>
+    /// <param name="meunImage">菜单图标</param>
+    /// <param name="action">菜单要执行的事件,参数为绑定的数据源</param>
+    /// <param name="showWithNoneDataRow">内容区没有元素时是否显示此菜单,默认显示</param>
+    /// <param name="existMenu">如果GirdControl行元素已经存在PopupMenu,则需要传入存在的PopupMenu)</param>
+    /// <returns></returns>
+    public static GridControl AddContentMenu<T>(this GridControl grid, string menuText, SvgImage meunImage,
+        Action<List<T>> action, bool showWithNoneDataRow = true)
+    {
+        GridTag tag = grid.Tag as GridTag;
+        var view = grid.MainView as GridView;
+        if (tag.BarM == null)
+        {
+            tag.BarM = new BarManager();
+            tag.BarM.Form = grid;
         }
-        else
+        if (tag.PopupMenu == null)
         {
-            popupMenu = existMenu;
-            tag.PopupMenu = existMenu;
-            tag.BarM = existMenu.Manager;
+            tag.PopupMenu = new PopupMenu();
         }
+        var popupMenu = tag.PopupMenu;
         BarButtonItem item = new BarButtonItem();
         item.ItemClick += (sender, e) =>
         {
-            item.Enabled = false;
-            onClick?.Invoke();
-            item.Enabled = true;
+            if (action != null)
+            {
+                var ds = grid.DataSource as List<T>;
+                if (!showWithNoneDataRow && (ds == null || ds.Count == 0)) return;
+                item.Enabled = false;
+                action.Invoke(ds);
+                item.Enabled = true;
+            }
         };
         item.ImageOptions.SvgImage = meunImage;
         item.Caption = menuText;
@@ -395,4 +698,46 @@ public static class GridControlEx
         tag.PopupMenu = popupMenu;
         return grid;
     }
+
+    private static void View_PopupMenuShowing(object sender, PopupMenuShowingEventArgs e)
+    {
+        if (e.Menu != null)
+        {
+            foreach (DXMenuItem item in e.Menu.Items)
+            {
+                if (!item.Enabled)
+                {
+                    item.Visible = false;
+                    continue;
+                }
+            }
+        }
+        //if (e.HitInfo.HitTest == DevExpress.XtraGrid.Views.Grid.ViewInfo.GridHitTest.EmptyRow)
+        //{
+        //    return;
+        //}
+        var view = sender as GridView;
+        var grid = view.GridControl;
+        var p = grid.PointToScreen(e.Point);
+        var tag = grid.Tag as GridTag;
+        if (tag?.PopupMenu != null)
+        {
+            foreach (BarButtonItemLink item in tag?.PopupMenu?.ItemLinks)
+            {
+                var buttonItem = item.Item;
+                if (buttonItem.Tag != null && buttonItem.Tag is Func<bool> showCondition)
+                {
+
+                    if (showCondition())
+                        buttonItem.Visibility = BarItemVisibility.Always;
+                    else
+                        buttonItem.Visibility = BarItemVisibility.Never;
+                }
+            }
+            tag?.PopupMenu?.ShowPopup(p);
+        }
+
+    }
+
 }
+

+ 5 - 3
XdCxRhDW.App/ExtensionsDev/SearchLookUpEditExtension.cs

@@ -11,6 +11,7 @@ using System.Linq;
 using System.Reflection;
 using System.Text;
 using System.Threading.Tasks;
+using System.Windows.Forms;
 
 namespace ExtensionsDev
 {
@@ -36,7 +37,6 @@ namespace ExtensionsDev
             ctrl.Properties.ShowClearButton = showClearBtn;
             ctrl.Properties.ShowFooter = false;
             ctrl.Properties.ShowPopupShadow = true;
-
             return ctrl;
         }
 
@@ -51,8 +51,9 @@ namespace ExtensionsDev
         {
             ctrl.Properties.DataSource = data;
             GridView view = ctrl.Properties.View;
+            view.Tag = ctrl;
             view.OptionsView.ShowColumnHeaders = false;
-            view.GridControl.Init<string>(searchLookUpEdit: ctrl);
+            view.GridControl.UseDefault<string>(null);
             return ctrl;
         }
         /// <summary>
@@ -66,8 +67,9 @@ namespace ExtensionsDev
             ctrl.QueryPopUp += Ctrl_QueryPopUp;
             ctrl.Properties.DataSource = data;
             GridView view = ctrl.Properties.View;
+            view.Tag = ctrl;
             view.OptionsView.ShowColumnHeaders = true;
-            view.GridControl.Init<T>(searchLookUpEdit: ctrl);
+            view.GridControl.UseDefault<T>(null);
             ctrl.CustomDisplayText += (sender, e) =>
             {
                 if (e.Value == null) return;

+ 2 - 2
XdCxRhDW.App/PopupControl/ShowCgCtrl.cs

@@ -25,8 +25,8 @@ namespace XdCxRhDW.App.PopupControl
         {
             InitializeComponent();
             this.layoutControl1.UseDefault();
-            gridShowCg.Init<ModelCg>().DataSource = listCg;
-            gridCgXgf.Init<ModelCgXgf>().UseRowNumber().DataSource = listXgf;
+            gridShowCg.UseDefault(listCg);
+            gridCgXgf.UseDefault(listXgf).UseRowNumber();
         }
 
         public ShowCgCtrl(PosRes posItem)

+ 1 - 1
XdCxRhDW.App/PopupControl/ShowCheckCtrl.cs

@@ -23,7 +23,7 @@ namespace XdCxRhDW.App.PopupControl
         public ShowCheckCtrl()
         {
             InitializeComponent();
-            gridShowCheck.Init<CheckRes>().DataSource = list;
+            gridShowCheck.UseDefault(list);
         }
         public ShowCheckCtrl(PosRes posItem)
             :this()

+ 1 - 1
XdCxRhDW.App/PopupControl/ShowCxCtrl.cs

@@ -23,7 +23,7 @@ namespace XdCxRhDW.App.PopupControl
         public ShowCxCtrl()
         {
             InitializeComponent();
-            gridShowCx.Init<CxRes>().DataSource = list;
+            gridShowCx.UseDefault(list);
         }
         public ShowCxCtrl(PosRes posItem)
             :this()

+ 30 - 39
XdCxRhDW.App/UserControl/CtrlCgRes.cs

@@ -35,41 +35,7 @@ namespace XdCxRhDW.App.UserControl
             layoutControl1.UseDefault();
             txtStartTime.UseDefault();
             txtEndTime.UseDefault();
-            gridCg.Init<CgRes>(showScrollH:true).UseMultiSelect().UseSort().UseFilter().AddMenu("删除", SvgHelper.CreateClose(), async () =>
-            {
-                try
-                {
-
-                    if (XtraMessageBox.Show("确认删除参估?", "确认", MessageBoxButtons.YesNo, MessageBoxIcon.Question) != DialogResult.Yes)
-                        return;
-                    var idsGrid = gridView1.GetSelectedRows();
-                    List<CgRes> selectedRes = new List<CgRes>();
-                    foreach (var row in idsGrid)
-                    {
-                        selectedRes.Add(gridView1.GetRow(row) as CgRes);
-                    }
-                    var groupItems = selectedRes.GroupBy(p => p.SigTime.ToString("yyyyMMdd"));
-                    foreach (var groupItem in groupItems)
-                    {
-                        var ids = groupItem.Select(m => m.ID).ToList();
-                        using (RHDWPartContext db = RHDWPartContext.GetContext(groupItem.First().SigTime))
-                        {
-                            List<CgRes> list = await db.CgRes.Where(p => ids.Contains(p.ID)).ToListAsync();
-                            db.CgRes.RemoveRange(list);
-                            await db.SaveChangesAsync();
-                        }
-                    }
-                    var seltedIds = selectedRes.Select(s => s.ID);
-                    list.RemoveAll(r => seltedIds.Contains(r.ID));
-                    //dataSourceCg();
-                    gridView1.RefreshData();
-                }
-                catch (Exception ex)
-                {
-                    Serilog.Log.Error(ex, "删除参估结果异常");
-                    DxHelper.MsgBoxHelper.ShowError("删除参估结果异常");
-                }
-            }).DataSource = list;
+            gridCg.UseDefault(list,showScrollH: true).UseDeleteAsync<CgRes>(DelCg);
         }
 
         private async void CtrlCgRes_Load(object sender, EventArgs e)
@@ -91,6 +57,31 @@ namespace XdCxRhDW.App.UserControl
             }
         }
 
+
+        private async Task<bool> DelCg(List<CgRes> selectedRes)
+        {
+            try
+            {
+                var groupItems = selectedRes.GroupBy(p => p.SigTime.ToString("yyyyMMdd"));
+                foreach (var groupItem in groupItems)
+                {
+                    var ids = groupItem.Select(m => m.ID).ToList();
+                    using (RHDWPartContext db = RHDWPartContext.GetContext(groupItem.First().SigTime))
+                    {
+                        List<CgRes> list = await db.CgRes.Where(p => ids.Contains(p.ID)).ToListAsync();
+                        db.CgRes.RemoveRange(list);
+                        await db.SaveChangesAsync();
+                    }
+                }
+                return true;
+            }
+            catch (Exception ex)
+            {
+                Serilog.Log.Error(ex, "删除参估结果异常");
+                DxHelper.MsgBoxHelper.ShowError("删除参估结果异常");
+                return false;
+            }
+        }
         private void txtTimeCho_SelectedIndexChanged(object sender, EventArgs e)
         {
             switch (txtTimeCho.Text)
@@ -109,7 +100,7 @@ namespace XdCxRhDW.App.UserControl
                     break;
             }
         }
-       
+
         private async void btnSearch_Click(object sender, EventArgs e)
         {
             if (txtTask.EditValue == null)
@@ -144,7 +135,7 @@ namespace XdCxRhDW.App.UserControl
             this.gridCg.DataSource = list;
             gridView1.BestFitColumns();
         }
-         private async Task<List<CgRes>> searchPos()
+        private async Task<List<CgRes>> searchPos()
         {
             try
             {
@@ -179,12 +170,12 @@ namespace XdCxRhDW.App.UserControl
                         }
                     }
                 }
-                skip:
+            skip:
                 if (end == DateTime.MinValue)
                 {
                     return new List<CgRes>();//没有数据不查询
                 }
-               
+
                 DateTime endDay = new DateTime(end.Year, end.Month, end.Day);
                 DateTime startDay = new DateTime(start.Year, start.Month, start.Day);
                 List<CgRes> list = new List<CgRes>();

+ 4 - 11
XdCxRhDW.App/UserControl/CtrlHome.cs

@@ -77,19 +77,12 @@ namespace XdCxRhDW.App.UserControl
 
         private async void CtrlHome_Load(object sender, EventArgs e)
         {
-            gridHomeTask.Init<TaskInfo>().UseFilter().DataSource = list;
-            gridHomePosRes.Init<ModelPosRes>().UseMultiSelect().UseRowNumber().UseSort().UseFilter()
-                .AddMenu("删除", SvgHelper.CreateClose(), async () =>
+            gridHomeTask.UseDefault(list);
+            gridHomePosRes.UseDefault(new List<ModelPosRes>()).UseMultiSelect().UseRowNumber()
+                .AddMultRowMenu<ModelPosRes>("删除", SvgHelper.CreateClose(), async list =>
                 {
-                    if (!MsgBoxHelper.ShowConfirm("是否删除选中的记录!")) return;
                     try
                     {
-                        var rows = gridView2.GetSelectedRows();
-                        List<ModelPosRes> list = new List<ModelPosRes>();
-                        foreach (var item in rows)
-                        {
-                            list.Add(gridView2.GetRow(item) as ModelPosRes);
-                        }
                         var groupItems = list.GroupBy(p => p.SigTime.ToString("yyyyMMdd"));
                         foreach (var groupItem in groupItems)
                         {
@@ -108,7 +101,7 @@ namespace XdCxRhDW.App.UserControl
                         Serilog.Log.Error(ex, "表格中删除定位点异常!");
                         DxHelper.MsgBoxHelper.ShowError("删除定位点异常!");
                     }
-                }, popupMenu2).DataSource = new List<ModelPosRes>();
+                });
             txtStartTime.UseDefault();
             txtEndTime.UseDefault();
             btnDrawDto.ImageOptions.SvgImage = SvgHelper.LoadFromFile("Image\\DtoLine.svg");

+ 0 - 109
XdCxRhDW.App/UserControl/CtrlSat.Designer.cs

@@ -28,23 +28,10 @@
         /// </summary>
         private void InitializeComponent()
         {
-            this.components = new System.ComponentModel.Container();
-            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(CtrlSat));
             this.gridSat = new DevExpress.XtraGrid.GridControl();
             this.gridView1 = new DevExpress.XtraGrid.Views.Grid.GridView();
-            this.barManager1 = new DevExpress.XtraBars.BarManager(this.components);
-            this.barDockControlTop = new DevExpress.XtraBars.BarDockControl();
-            this.barDockControlBottom = new DevExpress.XtraBars.BarDockControl();
-            this.barDockControlLeft = new DevExpress.XtraBars.BarDockControl();
-            this.barDockControlRight = new DevExpress.XtraBars.BarDockControl();
-            this.btnAdd = new DevExpress.XtraBars.BarButtonItem();
-            this.btnDel = new DevExpress.XtraBars.BarButtonItem();
-            this.popupMenu1 = new DevExpress.XtraBars.PopupMenu(this.components);
-            this.btnEdit = new DevExpress.XtraBars.BarButtonItem();
             ((System.ComponentModel.ISupportInitialize)(this.gridSat)).BeginInit();
             ((System.ComponentModel.ISupportInitialize)(this.gridView1)).BeginInit();
-            ((System.ComponentModel.ISupportInitialize)(this.barManager1)).BeginInit();
-            ((System.ComponentModel.ISupportInitialize)(this.popupMenu1)).BeginInit();
             this.SuspendLayout();
             // 
             // gridSat
@@ -62,105 +49,18 @@
             // 
             this.gridView1.GridControl = this.gridSat;
             this.gridView1.Name = "gridView1";
-            this.gridView1.PopupMenuShowing += new DevExpress.XtraGrid.Views.Grid.PopupMenuShowingEventHandler(this.gridView1_PopupMenuShowing);
-            this.gridView1.CustomDrawEmptyForeground += new DevExpress.XtraGrid.Views.Base.CustomDrawEventHandler(this.gridView1_CustomDrawEmptyForeground);
-            // 
-            // barManager1
-            // 
-            this.barManager1.DockControls.Add(this.barDockControlTop);
-            this.barManager1.DockControls.Add(this.barDockControlBottom);
-            this.barManager1.DockControls.Add(this.barDockControlLeft);
-            this.barManager1.DockControls.Add(this.barDockControlRight);
-            this.barManager1.Form = this;
-            this.barManager1.Items.AddRange(new DevExpress.XtraBars.BarItem[] {
-            this.btnAdd,
-            this.btnDel,
-            this.btnEdit});
-            this.barManager1.MaxItemId = 3;
-            // 
-            // barDockControlTop
-            // 
-            this.barDockControlTop.CausesValidation = false;
-            this.barDockControlTop.Dock = System.Windows.Forms.DockStyle.Top;
-            this.barDockControlTop.Location = new System.Drawing.Point(0, 0);
-            this.barDockControlTop.Manager = this.barManager1;
-            this.barDockControlTop.Size = new System.Drawing.Size(647, 0);
-            // 
-            // barDockControlBottom
-            // 
-            this.barDockControlBottom.CausesValidation = false;
-            this.barDockControlBottom.Dock = System.Windows.Forms.DockStyle.Bottom;
-            this.barDockControlBottom.Location = new System.Drawing.Point(0, 422);
-            this.barDockControlBottom.Manager = this.barManager1;
-            this.barDockControlBottom.Size = new System.Drawing.Size(647, 0);
-            // 
-            // barDockControlLeft
-            // 
-            this.barDockControlLeft.CausesValidation = false;
-            this.barDockControlLeft.Dock = System.Windows.Forms.DockStyle.Left;
-            this.barDockControlLeft.Location = new System.Drawing.Point(0, 0);
-            this.barDockControlLeft.Manager = this.barManager1;
-            this.barDockControlLeft.Size = new System.Drawing.Size(0, 422);
-            // 
-            // barDockControlRight
-            // 
-            this.barDockControlRight.CausesValidation = false;
-            this.barDockControlRight.Dock = System.Windows.Forms.DockStyle.Right;
-            this.barDockControlRight.Location = new System.Drawing.Point(647, 0);
-            this.barDockControlRight.Manager = this.barManager1;
-            this.barDockControlRight.Size = new System.Drawing.Size(0, 422);
-            // 
-            // btnAdd
-            // 
-            this.btnAdd.Caption = "添加";
-            this.btnAdd.Id = 0;
-            this.btnAdd.ImageOptions.SvgImage = ((DevExpress.Utils.Svg.SvgImage)(resources.GetObject("btnAdd.ImageOptions.SvgImage")));
-            this.btnAdd.Name = "btnAdd";
-            this.btnAdd.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.btnAdd_ItemClick);
-            // 
-            // btnDel
-            // 
-            this.btnDel.Caption = "删除";
-            this.btnDel.Id = 1;
-            this.btnDel.ImageOptions.SvgImage = ((DevExpress.Utils.Svg.SvgImage)(resources.GetObject("btnDel.ImageOptions.SvgImage")));
-            this.btnDel.Name = "btnDel";
-            this.btnDel.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.btnDel_ItemClick);
-            // 
-            // popupMenu1
-            // 
-            this.popupMenu1.LinksPersistInfo.AddRange(new DevExpress.XtraBars.LinkPersistInfo[] {
-            new DevExpress.XtraBars.LinkPersistInfo(this.btnAdd),
-            new DevExpress.XtraBars.LinkPersistInfo(this.btnEdit),
-            new DevExpress.XtraBars.LinkPersistInfo(this.btnDel)});
-            this.popupMenu1.Manager = this.barManager1;
-            this.popupMenu1.Name = "popupMenu1";
-            // 
-            // btnEdit
-            // 
-            this.btnEdit.Caption = "编辑";
-            this.btnEdit.Id = 2;
-            this.btnEdit.ImageOptions.SvgImage = ((DevExpress.Utils.Svg.SvgImage)(resources.GetObject("btnEdit.ImageOptions.SvgImage")));
-            this.btnEdit.Name = "btnEdit";
-            this.btnEdit.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.btnEdit_ItemClick);
             // 
             // CtrlSat
             // 
             this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 14F);
             this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
             this.Controls.Add(this.gridSat);
-            this.Controls.Add(this.barDockControlLeft);
-            this.Controls.Add(this.barDockControlRight);
-            this.Controls.Add(this.barDockControlBottom);
-            this.Controls.Add(this.barDockControlTop);
             this.Name = "CtrlSat";
             this.Size = new System.Drawing.Size(647, 422);
             this.Load += new System.EventHandler(this.CtrlSat_Load);
             ((System.ComponentModel.ISupportInitialize)(this.gridSat)).EndInit();
             ((System.ComponentModel.ISupportInitialize)(this.gridView1)).EndInit();
-            ((System.ComponentModel.ISupportInitialize)(this.barManager1)).EndInit();
-            ((System.ComponentModel.ISupportInitialize)(this.popupMenu1)).EndInit();
             this.ResumeLayout(false);
-            this.PerformLayout();
 
         }
 
@@ -168,14 +68,5 @@
 
         private DevExpress.XtraGrid.GridControl gridSat;
         private DevExpress.XtraGrid.Views.Grid.GridView gridView1;
-        private DevExpress.XtraBars.BarManager barManager1;
-        private DevExpress.XtraBars.BarDockControl barDockControlTop;
-        private DevExpress.XtraBars.BarDockControl barDockControlBottom;
-        private DevExpress.XtraBars.BarDockControl barDockControlLeft;
-        private DevExpress.XtraBars.BarDockControl barDockControlRight;
-        private DevExpress.XtraBars.BarButtonItem btnAdd;
-        private DevExpress.XtraBars.BarButtonItem btnDel;
-        private DevExpress.XtraBars.PopupMenu popupMenu1;
-        private DevExpress.XtraBars.BarButtonItem btnEdit;
     }
 }

+ 24 - 58
XdCxRhDW.App/UserControl/CtrlSat.cs

@@ -17,7 +17,7 @@ namespace XdCxRhDW.App.UserControl
 {
     public partial class CtrlSat : DevExpress.XtraEditors.XtraUserControl
     {
-        List<SatInfo> list = new List<SatInfo>();
+        readonly List<SatInfo> list = new List<SatInfo>();
         public CtrlSat()
         {
             InitializeComponent();
@@ -26,14 +26,15 @@ namespace XdCxRhDW.App.UserControl
         {
             try
             {
-                gridSat.Init<SatInfo>().UseSort().UseFilter().UseMultiSelect().UseRowNumber();
-                gridSat.DataSource = list;
-                using (RHDWContext db = new RHDWContext())
+                gridSat.UseDefault(list).UseMultiSelect().UseRowNumber()
+                    .UseAddAsync(Add)
+                    .UseEditAsync<SatInfo>(Edit)
+                    .UseDeleteAsync<SatInfo>(Delete);
+                using (var db = new RHDWContext())
                 {
-                    var res = db.SatInfos.OrderBy(p => p.SatName).OrderBy(p => p.SatName);
-                    list.AddRange(await res.ToListAsync());
+                    var items = await db.SatInfos.OrderBy(p => p.SatName).ToListAsync();
+                    list.AddRange(items);
                 }
-                gridView1.RefreshData();
             }
             catch (Exception ex)
             {
@@ -41,49 +42,35 @@ namespace XdCxRhDW.App.UserControl
                 DxHelper.MsgBoxHelper.ShowError("查询卫星信息异常");
             }
         }
-        private void gridView1_PopupMenuShowing(object sender, DevExpress.XtraGrid.Views.Grid.PopupMenuShowingEventArgs e)
-        {
-            if (gridView1.GetSelectedRows().Any())
-            {
-                btnDel.Visibility = DevExpress.XtraBars.BarItemVisibility.Always;
-                btnEdit.Visibility = DevExpress.XtraBars.BarItemVisibility.Always;
-            }
-            else
-            {
-                btnDel.Visibility = DevExpress.XtraBars.BarItemVisibility.Never;
-                btnEdit.Visibility = DevExpress.XtraBars.BarItemVisibility.Never;
-            }
-            popupMenu1.ShowPopup(MousePosition);
-        }
 
-        private async void btnAdd_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
+        private async Task<SatInfo> Add()
         {
             try
             {
                 SatEditor frm = new SatEditor();
-                if (frm.ShowDialog() != DialogResult.OK) return;
+                if (frm.ShowDialog() != DialogResult.OK) return null;
                 var addItem = frm.info;
                 using (RHDWContext db = new RHDWContext())
                 {
                     db.SatInfos.Add(addItem);
                     await db.SaveChangesAsync();
                 }
-                list.Add(addItem);
-                gridView1.RefreshData();
+                return addItem;
             }
             catch (Exception ex)
             {
                 Serilog.Log.Error(ex, "添加卫星信息异常");
                 DxHelper.MsgBoxHelper.ShowError("添加卫星信息异常");
+                return null;
             }
         }
-        private async void btnEdit_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
+
+        private async Task<SatInfo> Edit(SatInfo editItem)
         {
             try
             {
-                var editItem = gridView1.GetFocusedRow() as SatInfo;
                 SatEditor frm = new SatEditor(editItem);
-                if (frm.ShowDialog() != DialogResult.OK) return;
+                if (frm.ShowDialog() != DialogResult.OK) return null;
                 editItem = frm.info;
                 using (RHDWContext db = new RHDWContext())
                 {
@@ -93,57 +80,36 @@ namespace XdCxRhDW.App.UserControl
                     find.SatLon = editItem.SatLon;
                     await db.SaveChangesAsync();
                 }
-                gridView1.RefreshData();
+                return editItem;
             }
             catch (Exception ex)
             {
                 Serilog.Log.Error(ex, "保存卫星信息异常");
                 DxHelper.MsgBoxHelper.ShowError("保存卫星信息异常");
+                return null;
             }
         }
-        private async void btnDel_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
+
+        private async Task<bool> Delete(List<SatInfo> list)
         {
             try
             {
-                if (XtraMessageBox.Show("确认删除选择的卫星信息?", "确认", MessageBoxButtons.YesNo, MessageBoxIcon.Question) != DialogResult.Yes)
-                {
-                    return;
-                }
-                var ids = gridView1.GetSelectedRows();
-
+                var ids = list.Select(p => p.ID);
                 using (RHDWContext db = new RHDWContext())
                 {
-                    foreach (var id in ids)
-                    {
-                        var item = gridView1.GetRow(id) as SatInfo;
-
-                        var delItem = await db.SatInfos.Where(p => p.ID == item.ID).FirstOrDefaultAsync();
-                        if (delItem != null)
-                            db.SatInfos.Remove(delItem);
-                    }
+                    var delItems = await db.SatInfos.Where(p => ids.Contains(p.ID)).ToListAsync();
+                    db.SatInfos.RemoveRange(delItems);
                     await db.SaveChangesAsync();
                 }
-                gridView1.DeleteSelectedRows();
+                return true;
             }
             catch (Exception ex)
             {
                 Serilog.Log.Error(ex, "删除卫星信息异常");
                 DxHelper.MsgBoxHelper.ShowError("删除卫星信息异常");
+                return false;
             }
         }
-        private void gridView1_CustomDrawEmptyForeground(object sender, DevExpress.XtraGrid.Views.Base.CustomDrawEventArgs e)
-        {
-            if (gridView1.RowCount == 0)
-            {
-                string txt = "右键添加卫星";
-                var s = e.Appearance.CalcTextSize(e.Cache, txt, e.Bounds.Width).ToSize();
-                var x = (e.Bounds.Width - s.Width) / 2;
-                var y = (e.Bounds.Height - s.Height) / 2;
-                e.Appearance.ForeColor = Color.Gray;
-                e.Appearance.DrawString(e.Cache, txt, new Rectangle(x, y, s.Width, s.Height));
-            }
-        }
-
 
     }
 }

+ 0 - 68
XdCxRhDW.App/UserControl/CtrlSat.resx

@@ -117,72 +117,4 @@
   <resheader name="writer">
     <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </resheader>
-  <metadata name="barManager1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>17, 17</value>
-  </metadata>
-  <assembly alias="DevExpress.Data.v23.2" name="DevExpress.Data.v23.2, Version=23.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
-  <data name="btnAdd.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
-    <value>
-        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi4z
-        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
-        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAKcCAAAC77u/
-        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
-        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
-        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
-        Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXJfMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAg
-        MzIgMzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLkJsdWV7ZmlsbDojMTE3N0Q3O30KCS5Z
-        ZWxsb3d7ZmlsbDojRkZCMTE1O30KCS5CbGFja3tmaWxsOiM3MjcyNzI7fQoJLkdyZWVue2ZpbGw6IzAz
-        OUMyMzt9CgkuUmVke2ZpbGw6I0QxMUMxQzt9Cgkuc3Qwe29wYWNpdHk6MC43NTt9Cgkuc3Qxe29wYWNp
-        dHk6MC41O30KPC9zdHlsZT4NCiAgPGcgaWQ9IkFkZCI+DQogICAgPHBhdGggZD0iTTI3LDE0aC05VjVj
-        MC0wLjUtMC41LTEtMS0xaC0yYy0wLjUsMC0xLDAuNS0xLDF2OUg1Yy0wLjUsMC0xLDAuNS0xLDF2MmMw
-        LDAuNSwwLjUsMSwxLDFoOXY5ICAgYzAsMC41LDAuNSwxLDEsMWgyYzAuNSwwLDEtMC41LDEtMXYtOWg5
-        YzAuNSwwLDEtMC41LDEtMXYtMkMyOCwxNC41LDI3LjUsMTQsMjcsMTR6IiBjbGFzcz0iR3JlZW4iIC8+
-        DQogIDwvZz4NCjwvc3ZnPgs=
-</value>
-  </data>
-  <data name="btnDel.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
-    <value>
-        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi4z
-        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
-        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAD4DAAAC77u/
-        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
-        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
-        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
-        Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXJfMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAg
-        MzIgMzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLkJsYWNre2ZpbGw6IzczNzM3NDt9Cgku
-        WWVsbG93e2ZpbGw6I0ZDQjAxQjt9CgkuR3JlZW57ZmlsbDojMTI5QzQ5O30KCS5CbHVle2ZpbGw6IzM4
-        N0NCNzt9CgkuUmVke2ZpbGw6I0QwMjEyNzt9CgkuV2hpdGV7ZmlsbDojRkZGRkZGO30KCS5zdDB7b3Bh
-        Y2l0eTowLjU7fQoJLnN0MXtvcGFjaXR5OjAuNzU7fQoJLnN0MntvcGFjaXR5OjAuMjU7fQoJLnN0M3tk
-        aXNwbGF5Om5vbmU7ZmlsbDojNzM3Mzc0O30KPC9zdHlsZT4NCiAgPHBhdGggZD0iTTE4LjgsMTZsOC45
-        LTguOWMwLjQtMC40LDAuNC0xLDAtMS40bC0xLjQtMS40Yy0wLjQtMC40LTEtMC40LTEuNCwwTDE2LDEz
-        LjJMNy4xLDQuM2MtMC40LTAuNC0xLTAuNC0xLjQsMCAgTDQuMyw1LjdjLTAuNCwwLjQtMC40LDEsMCwx
-        LjRsOC45LDguOWwtOC45LDguOWMtMC40LDAuNC0wLjQsMSwwLDEuNGwxLjQsMS40YzAuNCwwLjQsMSww
-        LjQsMS40LDBsOC45LTguOWw4LjksOC45ICBjMC40LDAuNCwxLDAuNCwxLjQsMGwxLjQtMS40YzAuNC0w
-        LjQsMC40LTEsMC0xLjRMMTguOCwxNnoiIGNsYXNzPSJSZWQiIC8+DQo8L3N2Zz4L
-</value>
-  </data>
-  <data name="btnEdit.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
-    <value>
-        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi4z
-        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
-        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAB0DAAAC77u/
-        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
-        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
-        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
-        Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXJfMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAg
-        MzIgMzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLkJsdWV7ZmlsbDojMTE3N0Q3O30KCS5Z
-        ZWxsb3d7ZmlsbDojRkZCMTE1O30KCS5CbGFja3tmaWxsOiM3MjcyNzI7fQoJLkdyZWVue2ZpbGw6IzAz
-        OUMyMzt9CgkuUmVke2ZpbGw6I0QxMUMxQzt9Cgkuc3Qwe29wYWNpdHk6MC43NTt9Cgkuc3Qxe29wYWNp
-        dHk6MC41O30KPC9zdHlsZT4NCiAgPGcgaWQ9IkVkaXQiPg0KICAgIDxwYXRoIGQ9Ik0yNy42LDguMmwt
-        My44LTMuOGMtMC41LTAuNS0xLjQtMC41LTEuOSwwbC0yLjUsMi41bDUuOCw1LjhsMi41LTIuNUMyOC4x
-        LDkuNiwyOC4xLDguOCwyNy42LDguMnoiIGNsYXNzPSJCbHVlIiAvPg0KICAgIDxwb2x5Z29uIHBvaW50
-        cz0iNCwyOCA5LjgsMjggNCwyMi4yICAiIGNsYXNzPSJCbHVlIiAvPg0KICAgIDxyZWN0IHg9IjUuOCIg
-        eT0iMTMuNCIgd2lkdGg9IjE3LjYiIGhlaWdodD0iOC4yIiBjbGFzcz0iQmx1ZSIgdHJhbnNmb3JtPSJt
-        YXRyaXgoMC43MDcsIC0wLjcwNzIsIDAuNzA3MiwgMC43MDcsIC04LjA3MjEsIDE1LjQwNDgpIiAvPg0K
-        ICA8L2c+DQo8L3N2Zz4L
-</value>
-  </data>
-  <metadata name="popupMenu1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>152, 17</value>
-  </metadata>
 </root>

+ 1 - 1
XdCxRhDW.App/UserControl/CtrlSvrs.cs

@@ -25,7 +25,7 @@ namespace XdCxRhDW.App.UserControl
         public CtrlSvrs()
         {
             InitializeComponent();
-            gridSvrs.Init<ModelSvrs>().UseFilter().UseGroup().UseRowNumber().UseSort().DataSource = list;
+            gridSvrs.UseDefault(list).UseGroup().UseRowNumber();
             gridSvrs.UseEdit();
             var linkEdit = new DevExpress.XtraEditors.Repository.RepositoryItemHyperLinkEdit();
             this.gridSvrs.RepositoryItems.Add(linkEdit);

+ 1 - 2
XdCxRhDW.App/UserControl/CtrlTarget.cs

@@ -30,8 +30,7 @@ namespace XdCxRhDW.App.UserControl
         {
             try
             {
-                gridTar.Init<TargetInfo>().UseSort().UseFilter().UseMultiSelect().UseRowNumber();
-                gridTar.DataSource = list;
+                gridTar.UseDefault(list).UseMultiSelect().UseRowNumber();
                 using (RHDWContext db = new RHDWContext())
                 {
                     var res = db.TargetInfos.OrderBy(p => p.TargetName).OrderBy(p => p.TargetName);

+ 1 - 2
XdCxRhDW.App/UserControl/CtrlXl.cs

@@ -30,8 +30,7 @@ namespace XdCxRhDW.App.UserControl
         }
         private async void CtrlXl_Load(object sender, EventArgs e)
         {
-            gridXl.Init<XlInfo>().UseSort().UseFilter().UseMultiSelect().UseRowNumber();
-            gridXl.DataSource = list;
+            gridXl.UseDefault(list).UseMultiSelect().UseRowNumber();
             await LoadData();
         }
         public async Task LoadData()

+ 1 - 6
XdCxRhDW.TaskServer/MainForm.cs

@@ -15,12 +15,7 @@ namespace XdCxRhDW.TaskServer
         public MainForm()
         {
             InitializeComponent();
-            gridLog.Init<LogInfo>().UseExportCsv().UseFilter()
-                .AddMenu("清除", SvgHelper.CreateClear(), () =>
-                {
-                    list.Clear();
-                    gridView1.RefreshData();
-                }).DataSource = list;
+            gridLog.UseDefault(list).UseExportCsv().UseClear<LogInfo>();
             gridView1.Columns[0].MaxWidth = 150;
             gridView1.Columns[1].MaxWidth = 120;
             LogHelper.Logger = info =>

Некоторые файлы не были показаны из-за большого количества измененных файлов