0

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

我正在使用一个 Wpf 功能区窗口。该窗口分为两行。在第一行中,我填充了 Wpf 功能区,在第二行中,我填充了一个 Dock 面板以填充基于操作的用户控件。

功能区有两个按钮

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

我创建了两个用户控件表单,一个是输入员工详细信息,第二个是显示 DataGrid 中的所有记录。

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

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

为此,我还使用了事件和委托,它很好地执行了所有代码,但 Dockpanel 没有被清除,也没有加载新控件。

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

但是当我尝试显示数据时,我在一个用户控件中单击 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 ......我不知道为什么请告诉我解决方案......

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

4

1 回答 1

0

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

于 2012-08-25T19:12:36.523 回答