namespace HStation.WinFrmUI { public partial class EditPackagePartPropDlg : DevExpress.XtraEditors.XtraForm { public EditPackagePartPropDlg() { InitializeComponent(); this.gridView1.Columns["PropGroupName"].Group(); this.IconOptions.Icon = Yw.WinFrmUI.GlobalParas.AppIcon; this.packageProductListBox1.MouseUp += packageProductListBox1_MouseUp; } #region Private private BLL.AssetsPackagePartMain _bll; private List _propList; private List _allBindingList = new List(); private Vmo.AssetsPackageMainAndPartMappingVmo _partMapping; private Vmo.AssetsPackageMainVmo _PackageMain; private Vmo.AssetsPackagePartMainVmo _PackagePart; private long _catalogID; //分类ID private Vmo.AssetsPackageSeriesVmo _series; //系列ID private List _allPropList; private Yw.BLL.SysPropMapping _sysPropMapping; #endregion Private //回调事件 public event Func, Vmo.AssetsPackageMainAndPartMappingVmo, Task> ReloadEvent; //数据绑定 public async void SetBindingData(Vmo.AssetsPackageMainVmo AssetsPackageMain) { this.packageProductListBox1.SetBindingData(AssetsPackageMain); _PackageMain = AssetsPackageMain; this.packageProductListBox1.SelectReloadEvent += () => { ListBoxPart_SelectedIndexChanged(); }; this.packageProductListBox1.AddReloadEvent += () => { BarBtnAddPackagePart_ItemClick(); }; _bll = new BLL.AssetsPackagePartMain(); var allpartlist = await _bll.GetByPackageMainID(AssetsPackageMain.ID); //获取所有产品 var series = await new BLL.AssetsPackageSeries().GetByID(AssetsPackageMain.SeriesID); //获取系列 _PackagePart = new Vmo.AssetsPackagePartMainVmo(); _series = series; _PackagePart.SeriesID = _series.ID; _catalogID = series.CatalogID; _propList = new List(); _partMapping = new Vmo.AssetsPackageMainAndPartMappingVmo(); _partMapping.MainID = AssetsPackageMain.ID; _partMapping.SeriesID = _series.ID; this.propGroupChoiceViewModelBindingSource.DataSource = _propList; this.propGroupChoiceViewModelBindingSource.ResetBindings(false); } //分类选择变换 private async void SetPropSelectedValue(CurrentPackagePartMainViewModel partmain) { layoutControAddPart.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Never; var model = await _bll.GetByID(partmain.ID); if (model == null) return; this.TextEditNo.Text = partmain.NO.Trim(); this.TextEditProductCode.Text = partmain.Code.Trim(); this.TextEditProductName.Text = partmain.Name.Trim(); _propList.Clear(); var bll = new Yw.BLL.SysPropStruct(); var catlog = await bll.GetByCatalogID(_catalogID); if (catlog == null) { this.propGroupChoiceViewModelBindingSource.ResetBindings(false); return; } _propList.Clear(); foreach (var item in catlog) { foreach (var prop in item.PropList) { _propList.Add(new PackagePropGroupChoiceViewModel() { PropGroupName = item.Name, PropName = prop.Name, ID = prop.ID, KeyWorldType = "Prop" }); } } var propbll = new BLL.AssetsPackagePropContent(); var alllist = await propbll.GetByPackagePartID(model.ID); _allPropList = alllist; foreach (var item in alllist) { var selectProp = _propList.Find(x => x.ID == item.PropID); if (selectProp != null) { selectProp.Value = item.PropValue; } } this.propGroupChoiceViewModelBindingSource.ResetBindings(false); this.gridView1.ExpandAllGroups(); } //产品列表聚焦改变 private void ListBoxPart_SelectedIndexChanged() { var vm = this.packageProductListBox1.GetCurrentVm(); if (vm == null) return; SetPropSelectedValue(vm); } //确认编辑 private async void BtnOk_Click(object sender, EventArgs e) { var vm = this.packageProductListBox1.GetCurrentVm(); if (vm == null) return; var updatepart = new Vmo.AssetsPackagePartMainVmo(); updatepart.ID = vm.ID; updatepart.Name = TextEditProductName.Text; updatepart.NO = TextEditNo.Text; updatepart.Code = TextEditProductCode.Text; updatepart.SeriesID = _series.ID; var propList = _propList.Where(x => x.KeyWorldType == "Prop").ToList(); //找到所有的额外属性 foreach (var item in propList) { if (_allPropList != null) { // 查找 _allPropList 中是否存在与 item.UserID 匹配的项 var prop = _allPropList.FirstOrDefault(x => x.PropID == item.ID); // 如果找到匹配的项,则更新其 PropValue if (prop != null) { prop.PropValue = item.Value; } else { _allPropList.Add(new Vmo.AssetsPackagePropContentVmo() { SeriesID = _allPropList.First().SeriesID, PartID = _allPropList.First().PartID, PropID = item.ID, PropValue = item.Value }); } } } var PackageMainBll = new BLL.AssetsPackageMain(); await PackageMainBll.Update(_PackageMain); if (await _bll.UpdateEx(updatepart, _allPropList)) { vm.Reset(updatepart); this.packageProductListBox1.Refresh(); TipFormHelper.ShowSucceed("修改成功!"); } else { TipFormHelper.ShowError("修改失败!"); } this.DialogResult = DialogResult.OK; this.Close(); } //左侧树右击菜单事件 private void packageProductListBox1_MouseUp(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Right) { Point screenPoint = Cursor.Position; popupPackagePartMenu.ShowPopup(screenPoint); } } private bool Vaild() { this.dxErrorProvider1.ClearErrors(); if (TextEditProductName.Text == null) { this.dxErrorProvider1.SetError(TextEditProductName, "必填项"); return false; } return true; } //添加产品 private async void BtnAddPackagePart_Click(object sender, EventArgs e) { if (!Vaild()) return; _PackagePart.Name = TextEditProductName.Text; _PackagePart.NO = TextEditNo.Text; _PackagePart.Code = TextEditProductCode.Text; var AssetsPackagePropContent = new List(); foreach (var item in _propList) { AssetsPackagePropContent.Add(new Vmo.AssetsPackagePropContentVmo { PropID = item.ID, PropValue = item.Value, SeriesID = _PackagePart.SeriesID }); } var id = await _bll.InsertEx(_PackagePart, AssetsPackagePropContent, _partMapping); if (id > 0) { var Packagepart = await _bll.GetByID(id); this.packageProductListBox1._allBindingList.Add(new CurrentPackagePartMainViewModel(Packagepart)); this.packageProductListBox1.Refresh(); TipFormHelper.ShowSucceed("添加成功!"); } else { TipFormHelper.ShowError("添加失败!"); } this.DialogResult = DialogResult.OK; this.Close(); } #region 菜单功能 //添加产品 private async void BarBtnAddPackagePart_ItemClick() { layoutControAddPart.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Always; TextEditProductName.Text = string.Empty; TextEditNo.Text = string.Empty; TextEditProductCode.Text = string.Empty; var bll = new Yw.BLL.SysPropStruct(); try { var catlog = await bll.GetByCatalogID(_catalogID); if (catlog == null) { this.propGroupChoiceViewModelBindingSource.ResetBindings(false); return; } _propList.Clear(); foreach (var item in catlog) { foreach (var prop in item.PropList) { _propList.Add(new PackagePropGroupChoiceViewModel() { PropGroupName = item.Name, PropName = prop.Name, ID = prop.ID, Value = prop.DefaultValue }); } } this.propGroupChoiceViewModelBindingSource.ResetBindings(false); } catch { } this.TextEditProductName.Properties.NullText = "在此输入产品名称"; // 尝试改变焦点以触发控件更新 this.TextEditProductName.Focus(); // this.TextEditProductName.SelectAll(); this.TextEditNo.Properties.NullText = "在此输入产品编号"; this.TextEditProductCode.Properties.NullText = "在此输入产品图号"; } // 删除产品 private async void BarBtnDeletePart_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { var vm = this.packageProductListBox1.GetCurrentVm(); if (vm == null) return; if (!MessageBoxHelper.IsClickOk("确定删除数据行")) { if (await _bll.DeleteEx(vm.ID)) { this.packageProductListBox1._allBindingList.Remove(vm); this.packageProductListBox1.Refresh(); MessageBoxHelper.ShowSuccess("删除成功!"); } else { MessageBoxHelper.ShowError("删除失败!"); } } } #endregion 菜单功能 //增加属性 private void simpleLabelItemAddProp_Click(object sender, EventArgs e) { /* var dlg = new AddPackagePropDlg(); dlg.SetBindingData(_series.CatalogID); dlg.ReloadDataEvent += async (rhs, groupName, propValue) => { var bll = new Yw.BLL.SysProp(); var id = await bll.Insert(rhs); if (id > 0) { _sysPropMapping = new Yw.BLL.SysPropMapping(); var allList = await _sysPropMapping.GetHaveListByCatalogID(_series.CatalogID); var list = new List(); foreach (var item in allList) { foreach (var prop in item.PropList) { if (prop.Have) { list.Add(new Yw.Vmo.SysPropMappingSetterVmo { PropID = prop.UserID, UnitName = prop.UnitName, IsNull = prop.IsNull, DefaultValue = prop.DefaultValue, ChoiceIds = prop.ChoiceList.Select(x => x.UserID).ToList(), }); } } } list.Add(new Yw.Vmo.SysPropMappingSetterVmo { PropID = id, UnitName = rhs.UnitName, IsNull = rhs.IsNull }); await _sysPropMapping.SetByCatalogID(_series.CatalogID, list); var model = await bll.GetByID(id); var partMain = new ExchangerPropChoiceViewModel() { PropGroupName = groupName, PropName = model.Name, UserID = model.UserID, Value = propValue, KeyWorldType = "Prop" }; _propList.Add(partMain); this.propGroupChoiceViewModelBindingSource.ResetBindings(false); return true; } return false; }; dlg.ShowDialog();*/ } } }