namespace Yw.WinFrmUI.Phart { public partial class PumpParallelInfoCtrl : DevExpress.XtraEditors.XtraUserControl { public PumpParallelInfoCtrl() { InitializeComponent(); this.gridView1.SetNormalEditView(); this.gridView2.SetNormalView(); this.repColor.ColorChanged += RepColor_ColorChanged; this.repColor.ColorAlignment = DevExpress.Utils.HorzAlignment.Center; this.repColor.TextEditStyle = DevExpress.XtraEditors.Controls.TextEditStyles.DisableTextEditor; this.repColor.ButtonsStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder; this.colRunStatus.OptionsColumn.AllowEdit = false; this.colRunStatus.OptionsColumn.ReadOnly = false; this.gridView1.RowCellClick += GridView1_RowCellClick; } /// /// 设置曲线 /// public event Action SetEvent; /// /// 设置曲线信息 /// public event Action SetInfoEvent; /// /// 添加曲线事件 /// public event Action AddEvent; /// /// 删除曲线事件 /// public event Action DeleteEvent; /// /// 设置设计点 /// public event Action SetDesignPointEvent; /// /// 保存事件 /// public event Action SaveEvent; private List _all_binding_list = null; public void SetBindingData(List vm_list, Yw.Geometry.Point2d design_pt = null) { _all_binding_list = new List(); if (vm_list != null && vm_list.Any()) { _all_binding_list = vm_list; //for (int i = 0; i < vm_list.Count; i++) //{ // var item = vm_list[i]; // var vm = new PumpSerialParallelInfoViewModel(); // vm.Id = item.Id; // vm.Name = item.Name; // vm.Color = item.Color; // vm.IsBp = item.IsBp; // vm.RatedSpeed = item.RatedSpeed; // vm.CurrentSpeed = item.CurrentSpeed; // vm.CurrentHz = Math.Round(item.CurrentSpeed / item.RatedSpeed * 50, 2); // vm.Qh = new Geometry.CubicSpline2d(item.Qh); // vm.Qe = new Geometry.CubicSpline2d(item.Qe); // vm.Qp = new Geometry.CubicSpline2d(item.Qp); // vm.ExtendRatio = 100; // vm.Calc(); // _all_binding_list.Add(vm); //} } this.txtDesignQ.EditValue = design_pt?.X; this.txtDesignH.EditValue = design_pt?.Y; this.pumpSerialParallelInfoViewModelBindingSource.DataSource = _all_binding_list; this.pumpSerialParallelInfoViewModelBindingSource.ResetBindings(false); this.gridView1.BestFitColumns(); } public void SetDesignPoint(double flow, double head) { this.txtDesignQ.EditValue = flow; this.txtDesignH.EditValue = head; } /// /// 获取 /// public Yw.Geometry.Point2d GetDesignPoint() { if (!double.TryParse(this.txtDesignQ.Text, out double x)) { return default; } if (!double.TryParse(this.txtDesignH.Text, out double y)) { return default; } return new Geometry.Point2d(x, y); } #region Color private List _color_array = new List() { Color.Red, Color.Blue, Color.Green,Color.DodgerBlue, Color.Fuchsia, Color.MidnightBlue, Color.Maroon, Color.Aquamarine, Color.Bisque,Color.BurlyWood }; /// /// 获取随机颜色 /// /// private Color GetRandomColor(int count) { if (count < _color_array.Count) { return _color_array[count]; } var _random = new Random(); int r = _random.Next(1, 256); int g = _random.Next(1, 256); int b = _random.Next(1, 256); return Color.FromArgb(r, g, b); } #endregion //颜色变换 private void RepColor_ColorChanged(object sender, EventArgs e) { if (this.gridView1.GetCurrentViewModel(_all_binding_list) is not PumpSerialParallelInfoViewModel vm) return; vm.Color = (sender as DevExpress.XtraEditors.ColorEdit).Color; this.SetInfoEvent?.Invoke(vm.Id, vm.Name, vm.Color); } private void GridView1_RowCellClick(object sender, DevExpress.XtraGrid.Views.Grid.RowCellClickEventArgs e) { if (e.Column == this.colRunStatus) { var vm = this.gridView1.GetRow(e.RowHandle) as PumpSerialParallelInfoViewModel; vm.RunStatus = !vm.RunStatus; this.gridView1.RefreshRow(e.RowHandle); if (_all_binding_list != null && _all_binding_list.Any()) { foreach (var item in _all_binding_list) { item.QueryH = string.Empty; item.QueryE = string.Empty; item.QueryQ = string.Empty; item.QueryP = string.Empty; } } this.pumpSerialParallelInfoViewModelBindingSource.ResetBindings(false); if (vm.RunStatus) { vm.Calc(); this.AddEvent?.Invoke(vm); } else { this.DeleteEvent?.Invoke(vm.Id); } } } //值变换 private void gridView1_CellValueChanged(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e) { if (e.Column == this.colName) { this.pumpSerialParallelInfoViewModelBindingSource.ResetBindings(false); var vm = this.gridView1.GetRow(e.RowHandle) as PumpSerialParallelInfoViewModel; this.SetInfoEvent?.Invoke(vm.Id, vm.Name, vm.Color); } else if (e.Column == this.colCurrentHz) { this.pumpSerialParallelInfoViewModelBindingSource.ResetBindings(false); var vm = this.gridView1.GetRow(e.RowHandle) as PumpSerialParallelInfoViewModel; if (vm.CurrentHz < 10 || vm.CurrentHz > 50) { return; } vm.Calc(); this.SetEvent?.Invoke(vm.Id, vm.QhCalc, vm.QeCalc, vm.QpCalc); } else if (e.Column == this.colExtendRatio) { this.pumpSerialParallelInfoViewModelBindingSource.ResetBindings(false); var vm = this.gridView1.GetRow(e.RowHandle) as PumpSerialParallelInfoViewModel; vm.Calc(); this.SetEvent?.Invoke(vm.Id, vm.QhCalc, vm.QeCalc, vm.QpCalc); } } /// /// 设置查询信息 /// /// /// public void SetQueryInfo(string id, PumpGroupPt query_pt) { if (query_pt == null) return; if (_all_binding_list == null || !_all_binding_list.Any()) return; var vm = _all_binding_list.Find(x => x.Id == id); if (vm == null) return; vm.QueryQ = query_pt.Q > 0 ? $"{query_pt.Q:N1}" : string.Empty; vm.QueryH = query_pt.H > 0 ? $"{query_pt.H:N1}" : string.Empty; vm.QueryE = query_pt.E > 0 ? $"{query_pt.E:N1}" : string.Empty; vm.QueryP = query_pt.P > 0 ? $"{query_pt.P:N1}" : string.Empty; this.pumpSerialParallelInfoViewModelBindingSource.ResetBindings(false); } //设置设计点 private void btnSetDesignPoint_Click(object sender, EventArgs e) { if (!double.TryParse(this.txtDesignQ.Text, out double design_q)) return; if (!double.TryParse(this.txtDesignH.Text, out double design_h)) return; this.SetDesignPointEvent?.Invoke(design_q, design_h); } public List GetRunList() { if (_all_binding_list == null || !_all_binding_list.Any()) { return default; } return _all_binding_list.Where(x => x.RunStatus).Select(x => new PumpSerialParallelInfoViewModel(x)).ToList(); } private void btnSave_Click(object sender, EventArgs e) { this.SaveEvent?.Invoke(); } } }