WPF 在datagrid模板列中添加用户控件,在后台如何快速的检索到该控件。急!!!
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WPF 在datagrid模板列中添加用户控件,在后台如何快速的检索到该控件。急!!!相关的知识,希望对你有一定的参考价值。
参考技术A 给你两种方法:为方便起见我用button代替自定义控件,具体操作还是一样的。前台代码如下:
<StackPanel>
<DataGrid AutoGenerateColumns="False" Height="200" Name="dataGrid1" Width="200" CanUserAddRows="False">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Header">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Button x:Name="mybutton" Tag="MyButton" Height="22" Width="50" Content="Binding Id"/>
<TextBlock Margin="10 0 0 0" Text="Binding Name"/>
</StackPanel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
<Button HorizontalAlignment="Center" Margin="10" Click="Button_Click">Search</Button>
<TextBlock x:Name="txt_result"/>
</StackPanel>
我放了一个只有一列模板列的datagrid,一个按钮,一个文本
后台给datagrid绑上数据源
dataGrid1.ItemsSource = new List<People>
new People()Id = 1,Name = "aaa",
new People()Id = 2,Name = "bbb",
new People()Id = 3,Name = "ccc"
;
然后就是通过按钮事件来处理模板列中内容
1.使用VisualTreeHelper
2.使用FindName
private void Button_Click(object sender, RoutedEventArgs e)
DataGridTemplateColumn tempColumn = dataGrid1.Columns[0] as DataGridTemplateColumn;
DataTemplate dtemp = tempColumn.CellTemplate;
//Button btn = (Button)VisualTreeHelper.GetChild(dtemp.LoadContent(),0); //第一种方法
StackPanel sp = (StackPanel)dtemp.LoadContent(); Button btn = sp.FindName("mybutton") as Button; //第二种方法
txt_result.Text = btn.Tag.ToString(); 参考技术B 请查看(如何从 Datagrid 中获得单元格的内容?): http://social.msdn.microsoft.com/Forums/zh-CN/wpfzhchs/thread/e1907834-611e-4e38-a47f-650a42087207
当我们单击 DataGrid 行时,在 wpf 功能区窗口中加载另一个用户控件
【中文标题】当我们单击 DataGrid 行时,在 wpf 功能区窗口中加载另一个用户控件【英文标题】:Loading another userControl in wpf Ribbon Window when the we click on DataGrid row 【发布时间】:2012-06-04 18:57:13 【问题描述】:请耐心阅读这篇文章...简要地说,我想要的是“当我 单击 DataGrid 行,这些值必须显示在另一个 表单(此处为 userControl)..”
我正在使用一个 Wpf 功能区窗口。该窗口分为两行。在第一行中,我填充了 Wpf 功能区,在第二行中,我填充了一个 Dock 面板以根据操作填充用户控件..
功能区有两个按钮
-
显示所有员工
添加员工
我创建了两个 Usercontrol Forms 一个是输入员工详细信息,第二个是显示 DataGrid 中的所有记录..
现在我首先单击 Ribbon Button1 以显示所有员工详细信息,然后将 userControl "CtlGridDisplay" 加载到 DockPanel(位于 Ribbon 窗口中)并在 DataGrid 中显示所有详细信息。
现在我双击行并获取选定的行employeeId 然后我希望在另一个用户控件“CtlAddEmployee”中显示该详细信息并且此用户控件必须仅显示在该 DockPanel 中.. 为此我试图清除 Dockpanel并为控件“CtlAddEmployee”创建了对象并将该控件添加到 DockPanel.. 但 DockPanel 仍然填充 仅 DataGRid 即填充“CtlGridDisplay”...我不明白为什么...
为此,我还使用了事件和委托,它可以很好地执行所有代码,但 Dockpanel 没有被清除,也没有加载新控件。..
但是当我单击一个功能区按钮 1 时,它会加载“CtlGridDisplay”,当我单击功能区按钮 2 时,它会在 Dock 面板中很好地加载“CtlAddEmployee”...
但是当我尝试显示数据时,我在一个用户控件中单击 DataGrid 以显示在另一个控件中不起作用..
Events Delegate 方法代码如下...
在用户控件“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】:您也必须为停靠面板调用事件。例如 leftMouseButtonUp 和停靠你的用户控件。
【讨论】:
以上是关于WPF 在datagrid模板列中添加用户控件,在后台如何快速的检索到该控件。急!!!的主要内容,如果未能解决你的问题,请参考以下文章
WPF DataGrid DataGridTemplateColumn 控制模板中控件