XAF中如何制作弹出窗体选择数据到ListView列表

1.问题:

         有多对对关系对象,想为从对象选择数据录入从别的相关对象。

2.实现思路:

    A.弹出选择窗体,从中选出所需记录

       B.将A和B组合为从对象,保存

       C.修改主从对象列表为可编辑(在View 中 Item_Detail_ListView设置为可编辑)

3.代码实现

   public partial class MP_Item_SelectOrderVC : ViewController
    {
        
public MP_Item_SelectOrderVC()
        {
            InitializeComponent();
            RegisterActions(components);
        }

        
protected override void OnActivated()
        {
            
base.OnActivated();
            
//按鈕在ViewId == "MP_Item_MP_ItemDetailCollection_ListView" 顯示
            pwsaSelectOrder.Active.SetItemValue("ViewId", View.Id == "MP_Item_MP_ItemDetails_ListView");// Application.FindListViewId(typeof(MP_ItemDetail)));

            
//啟用Lookup查詢
            if (View.Id == Application.FindListViewId(typeof(MP_MRF)) && Frame.Template is ILookupPopupFrameTemplate)
            {
                ((ILookupPopupFrameTemplate)Frame.Template).IsSearchEnabled 
= true;
                ListView listView 
= ((ListView)View);
                listView.CollectionSource.Criteria.Add(
"EmptyCollectionCriteria", CollectionSource.EmptyCollectionCriteria);
                listView.CollectionSource.Criteria.Changed 
+= delegate(object sender, EventArgs e)
                {
                    
//if (!ReferenceEquals(listView.CollectionSource.Criteria[FullTextSearchCriteriaBuilder.CriteriaName], null))
                    if (!ReferenceEquals(listView.CollectionSource.Criteria[FilterController.FullTextSearchCriteriaName], null))
                    {
                        listView.CollectionSource.Criteria.Remove(
"EmptyCollectionCriteria");
                    }
                    
else
                    {
                        
if (!listView.CollectionSource.Criteria.ContainsKey("EmptyCollectionCriteria"))
                        {
                            listView.CollectionSource.Criteria.Add(
"EmptyCollectionCriteria", CollectionSource.EmptyCollectionCriteria);
                        }
                    }
                };
            }
        }

        
private void pwsaSelectOrder_CustomizePopupWindowParams(object sender, CustomizePopupWindowParamsEventArgs e)
        {
            
//創建彈出窗口視圖
            ObjectSpace objectSpace = Application.CreateObjectSpace();
            
string applicationFindListViewId = Application.FindListViewId(typeof(MP_MRF));
            e.View 
= Application.CreateListView(
               applicationFindListViewId,
               Application.CreateCollectionSource(objectSpace, 
typeof(MP_MRF), applicationFindListViewId),
               
true
            );
        }

        
private void pwsaSelectOrder_Execute(object sender, PopupWindowShowActionExecuteEventArgs e)
        {
            
try
            {
                
//需要测试 
                
//2010-07-27
                PropertyCollectionSource pcs = ((ListView)View).CollectionSource as PropertyCollectionSource;
                MP_Item item 
= pcs.MasterObject as MP_Item;//获取主对象实例
                int i = 1;
                
if (item == nullreturn;
                
foreach (MP_MRF mrf in e.PopupWindow.View.SelectedObjects)
                {
                    MP_ItemDetail detail 
= null;//ObjectSpace.Session.FindObject<MP_ItemDetail>(new BinaryOperator("Material", "Sam"));
                    
//if (detail == null)
                    
//{
                        detail = new MP_ItemDetail(ObjectSpace.Session);
                        detail.Material 
= mrf.COMPONENT;
                        detail.Material_Description 
= mrf.COMPONENT_DESCRIPTION;
                        detail.Unit 
= mrf.COMPONT_UNIT;
                        detail.Item_ID 
= item ;
                        item.Note 
= mrf.OrderNO;
                        
//detail.Save();
                    
//}
                    
//給主對象賦值
                    if (i == 1//給主對象賦值,只賦值一次
                    {
                        item.OrderNO 
= mrf.OrderNO;
                        item.PNO 
= mrf.Material;
                        
//item.PQty = mrf.Order_Qty;
                        item.PUnit = mrf.Unit;
                        item.Plnt 
= mrf.Plnt;
                        
//item.PDescription = mrf.Description;
                        i++;
                    }
                }

                
View.ObjectSpace.CommitChanges();
                
View.ObjectSpace.Refresh();
            }
            
catch (Exception ex)
            {
                  
throw ex;
            }

        }

   
    }

欢迎转载,转载请注明出处:http://www.cnblogs.com/Tonyyang/

原文地址:https://www.cnblogs.com/Tonyyang/p/1619275.html