2016-08-15 4 views
1

私のWPF DataGridこの enter image description hereデータグリッドは、セル行のクリックイベントが

のように私は

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

にデータを記入

<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> 

道のマークアップを調べて、それが適用されていますどのように

Processes.ItemsSource = dataTable.DefaultView; 

私は既にウェブを検索して、thisを見つけましたが、私は必要なものを推測できませんでした。

私が欲しいもの

私は1行に(上記ID 13)をクリックどんなに、イベントが実行されます。私が必要とするのは、クリックされた行のIDです。それで、私はさらに「要求」を処理できます。 MouseDoubleClickとして名前datagridのイベントがあり、私の心の中で私は漠然とだ

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

答えて

1

。このようにして、ダブルクリックされた行のオブジェクト全体を取得することができます。私はあなたのクラスの名前がわからないので、あなたがあなたのクラスの名前でYourClassを置き換えることができたよう

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; 
       } 
      } 
     } 

基本的には、ダブルクリックイベントがDatagridで検出されます。次に、DataGridRowでイベントが実行されていることを確認します。そして、その行のItemを定義されたクラスにキャストします。

1

MVVMのアプローチではなく、単純にEventHandlerを使用すると、選択したセルの変更にハンドラを追加するよりも、行の情報のすべてにオブジェクトが移入されます。 :

<DataGrid SelectedCellsChanged="yourGrid_SelectedCellsChanged" ...> 

とコードビハインドファイル

private void yourGrid_SelectedCellsChanged(object sender, System.Windows.Controls.SelectedCellsChangedEventArgs e) 
    { 
     // retrieve the id here, like in the answer above 
    } 
関連する問題