XAF 如何实现两个ListView联动

本文介绍如何使用 DevExpress 的 DashboardView 控件创建部门和员工的联动效果。通过编写 C# 代码实现当选择不同部门时,员工列表会根据所选部门进行过滤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

例如:有部门和员工两个ListView

1.      首先用模型编辑器添加一个DashboardView1

2.      然后再给DashboardView1添加两个ItemDepartment_ListView Employee_ListView;

3.      代码

using System;

using DevExpress.ExpressApp;
using DevExpress.ExpressApp.Editors;
using System.Collections;
using DevExpress.Data.Filtering;

namespace EasyTestTool.Module
{
    
public partial class EmployeesDashboardInteractionController : ViewController<DashboardView>
    {
        
public EmployeesDashboardInteractionController()
        {
            InitializeComponent();
            RegisterActions(components);
        }

        
private const string TargetDashboardId = "DashboardView1";
        
private const string EmployeeCriteriaId = "SelectedDepartmentsCriteria";


        
private ListView employeeListView;
        
private ListView departmentListView;

        
protected override void OnActivated()
        {
            
base.OnActivated();

            
if (View.Id == TargetDashboardId)
            {
                
foreach (DashboardViewItem item in View.GetItems<DashboardViewItem>())
                {
                    item.ControlCreated 
+= item_ControlCreated;
                }
            }
        }

        
void item_ControlCreated(object sender, EventArgs e)
        {
            DashboardViewItem item 
= ((DashboardViewItem)sender);

            
if (item.Frame.View.Id == "Department_ListView")
            {
                departmentListView 
= (ListView)item.Frame.View;
                departmentListView.SelectionChanged 
+= departmentListView_SelectionChanged;
            }

            
if (item.Frame.View.Id == "Employee_ListView")
            {
                employeeListView 
= (ListView)item.Frame.View;
            }
        }

        
void departmentListView_SelectionChanged(object sender, EventArgs e)
        {
            ArrayList keys 
= new ArrayList();
            
object selectObject = null;
            
foreach (object selectedObejct in ((ListView)sender).SelectedObjects)
            {
                
if (selectedObejct != null)
                    keys.Add(ObjectSpace.GetKeyValue(selectedObejct));
            }

            FilterEmployeeListView(
new InOperator("Department", keys));
       }
        
         

        
private void FilterEmployeeListView(CriteriaOperator criteria)
        {
            employeeListView.CollectionSource.Criteria[EmployeeCriteriaId] 
= criteria;
        }

        
protected override void OnDeactivated()
        {
            
base.OnDeactivated();

            
if (View.Id == TargetDashboardId)
            {
                
foreach (DashboardViewItem item in View.GetItems<DashboardViewItem>())
                {
                    item.ControlCreated 
-= item_ControlCreated;
                }

                
if(departmentListView != null)
                {
                    departmentListView.SelectionChanged 
-= departmentListView_SelectionChanged;
                }
            }


        }
    }
}

 

转载于:https://www.cnblogs.com/Tonyyang/archive/2011/05/04/2036478.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值