当我们单击DataGrid行时,在wpf功能区窗口中加载另一个userControl

时间:2012-05-30 14:10:16

标签: c# .net wpf oop events

请耐心地阅读这个...简要地说我想要的是“当我 单击DataGrid行,这些值必须在另一行中显示 form(这里是userControl)..“

我正在使用一个Wpf功能区窗口..并且该窗口分为两行。在第一行中我填充了Wpf功能区,在第二行中我填充了一个Dock面板以根据操作填充Usercontrol ..

功能区有两个按钮

  1. 显示所有员工
  2. 添加员工
  3. 我创建了两个Usercontrol Forms,一个是输入员工详细信息,第二个是显示DataGrid中的所有记录..

    现在我首先点击功能区Button1以显示所有员工详细信息,然后将userControl“CtlGridDisplay”加载到DockPanel(位于功能区窗口中)并显示DataGrid中的所有详细信息。

    现在我双击行并获取所选行employeeId然后我希望在另一个用户控件“CtlAddEmployee”中显示该详细信息并且此userControl必须仅显示在该DockPanel中...因为我试图清除Dockpanel并为Control“CtlAddEmployee”创建了对象,并将该控件添加到DockPanel ..但DockPanel仍然填充 DataGRid只是填充了“CtlGridDisplay”......我无法理解为什么......

    要做到这一点,我还使用了事件和代理,它可以很好地执行所有代码,但Dockpanel没有被清除,也没有加载新的控件..

    但是当我点击一个功能区button1时,它会加载“CtlGridDisplay”,当我点击功能区按钮2时,它在Dock面板中加载“CtlAddEmployee”......

    但当我试图显示数据时,我在一个userControl中单击DataGrid以显示在另一个控件中不起作用..

    事件代表方法代码如下......

    在用户控件“CtlDisplayEmployeeList”中,代码​​

    public event MyOrganizationDetails.MainRibbonWinodw.DisplayEmployeeHandler DisplayemployeeEvent;
    
    private void GridList_MouseDoubleClick(object sender, MouseButtonEventArgs e)
    {
        MainRibbonWinodw mainRibbonobj = new MainRibbonWinodw();
        this.DisplayemployeeEvent += new MainRibbonWinodw.DisplayEmployeeHandler(mainRibbonobj.fnDisplayEmployeeDetails);
        if (GridList.SelectionUnit == DataGridSelectionUnit.FullRow)
        {
            if (GridList.SelectedItems.Count > 0)
            {
                for (int i = 0; i < GridList.SelectedItems.Count; i++)
                {
                    DataGrid dg = sender as DataGrid;
                    EmployeeDetail detail = dg.SelectedItem as EmployeeDetail;
                    string selectedEmp = detail.EmpId; //it gives Employee Id
    
                    if (DisplayemployeeEvent != null)
                        DisplayemployeeEvent(selectedEmp);
                } 
            }
        }
    }
    

    在功能区窗口中..代码将......在此处理事件......

    public partial class MainRibbonWinodw : RibbonWindow
    {
        public delegate void DisplayEmployeeHandler(string str);
    
        public void fnDisplayEmployeeDetails(string str)
        {
            CtlAddEmployee frm2 = new CtlAddEmployee(str);
            DockPanelInRibbon.Children.Clear();
            DockPanelInRibbon.Children.Add(frm2);    
        }
    }
    

    在另一个用户控件中..

    构造...

    public CtlAddEmployee(string str)
    {
        InitializeComponent();
        fnDisplayingEmployee(str);
    }
    

    当我调试所有代码被解雇但是“CtlAddEmployee”表单没有加载到DockPanel ... Dock面板仍然是那个DataGRid ...我不知道为什么请告诉我解决方案....

    感谢您的耐心......阅读本文...

1 个答案:

答案 0 :(得分:0)

您也必须为dockpanel调用事件。例如,leftMouseButtonUp并在那里停靠你的usercontrol。