繁体   English   中英

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

[英]Loading another userControl in wpf Ribbon Window when the we click on DataGrid row

请耐心阅读...简要地讲,我想要的是“当我单击DataGrid行时,这些值必须以另一种形式显示(此处为userControl)。”

我正在使用一个Wpf Ribbon窗口。该窗口分为两行。 在第一行中,我填充了Wpf功能区,在第二行中,我填充了一个Dock面板,以基于Action填充Usercontrols。

功能区有两个按钮

  1. 显示所有员工
  2. 添加员工

我创建了两个Usercontrol窗体,一个是输入员工详细信息,第二个是显示DataGrid中的所有记录。

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

现在,我双击行,并选择选定的行employeeId,然后我希望在另一个UserControl“ CtlAddEmployee”中显示该详细信息,而该userControl必须仅在该DockPanel中显示..为此,我试图清除Dockpanel并创建了控件“ CtlAddEmployee”的对象,并将该控件添加到DockPanel中。。但是DockPanel仍然仅用DataGRid填充,即用“ CtlGridDisplay”填充...我不明白为什么...

为此,我还使用了Event和Delegates,它可以很好地执行所有代码,但是Dockpanel并未清除并且未加载新控件。

但是,当我单击一个功能区button1时,它会加载“ CtlGridDisplay”,而当我单击功能区button2时,它会在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 ...我不知道为什么请告诉我解决方案.....

多谢您的耐心...阅读此书...

您也必须为事件面板调用事件。 例如leftMouseButtonUp,然后停靠您的用户控件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM