2016-08-15 81 views
1

我的WPF DataGrid看起来像这样 enter image description here数据网格单元行单击事件

的标记

<DataGrid x:Name="Processes" AutoGenerateColumns="False" ItemsSource="{Binding Path=ProcessesBinding}" HorizontalAlignment="Left" VerticalAlignment="Top" Height="200" Width="807" Margin="13,32,0,0"> 
     <DataGrid.Columns> 
      <DataGridTextColumn Binding="{Binding Path=Id}" Header="ID" Width="50" CanUserResize="False" IsReadOnly="True"></DataGridTextColumn> 
      <DataGridTextColumn Binding="{Binding Path=Friendlyname}" Header="Name" Width="200" CanUserResize="False" IsReadOnly="True"></DataGridTextColumn> 
      <DataGridTextColumn Binding="{Binding Path=Process}" Header="Process" Width="180" CanUserResize="False" IsReadOnly="True"></DataGridTextColumn> 
      <DataGridTextColumn Binding="{Binding Path=Status}" Header="Status" Width="180" CanUserResize="False" IsReadOnly="True"></DataGridTextColumn> 
      <DataGridTextColumn Binding="{Binding Path=Autostart}" Header="Auto Start" Width="100" CanUserResize="False" IsReadOnly="True"></DataGridTextColumn> 
      <DataGridTextColumn Binding="{Binding Path=Autorestart}" Header="Auto Restart" Width="100" CanUserResize="False" IsReadOnly="True"></DataGridTextColumn> 
     </DataGrid.Columns> 
    </DataGrid> 

的方式我填写

foreach (var ... in ...) 
{ 
    dataTable.Rows.Add(...); 
} 

数据以及它如何应用

Processes.ItemsSource = dataTable.DefaultView; 

我已经在网上搜索,发现this,但是,我无法推论出任何我需要的东西。

我想要什么:无论我点击第1行(ID 13以上),运行的事件。我唯一需要做的就是点击该行的ID,这样我就可以进一步处理'请求'。

这就是我在我的脑海

private void CellClick(int ID) { // show new window with id 
} 

回答

1

有一名为MouseDoubleClickdatagrid的事件隐约得到。您可以像这样使用它来获取双击行的整个对象。

private void dataGrid_MouseDoubleClick(object sender, MouseButtonEventArgs e) 
     { 
      if (sender != null) 
      { 
       DataGrid grid = sender as DataGrid; 
       if (grid != null && grid.SelectedItems != null && grid.SelectedItems.Count == 1) 
       { 
        DataGridRow dgr = grid.ItemContainerGenerator.ContainerFromItem(grid.SelectedItem) as DataGridRow; 
        YourClass obj = dgr.Item as YourClass; 
        this.selectedIndex = grid.SelectedIndex; 
        int id = obj.ID; 
       } 
      } 
     } 

由于我不知道你的类的名称,这样你就可以用你的类的名称替换YourClass

基本上这段代码的作用是检测Datagrid上的双击事件。然后它检查事件在DataGridRow上执行。然后它将该行的Item转换为您定义的类。和所有的行的信息将在该对象来填充您收到的类型转换的对象。

1

如果你不去的MVVM的做法,但简单地用事件处理器,比你可以添加一个处理程序选定单元格的变化:

<DataGrid SelectedCellsChanged="yourGrid_SelectedCellsChanged" ...> 

,并在代码隐藏文件

private void yourGrid_SelectedCellsChanged(object sender, System.Windows.Controls.SelectedCellsChangedEventArgs e) 
    { 
     // retrieve the id here, like in the answer above 
    } 
相关问题