2016-08-15 77 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 
    } 
相關問題