2016-08-15 5 views
1

내 WPF DataGridenter 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이므로 '요청'을 더 처리 할 수 ​​있습니다. 왠지 내 마음

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

답변

1

MouseDoubleClick로 명명 된 datagrid의 이벤트가 있습니다에있어 무엇

. 이렇게하면 두 번 클릭 한 행의 전체 객체를 가져올 수 있습니다. 당신이 당신의 클래스의 이름으로 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 접근 방식을 사용하지 않고 단순히 EventHandlers를 사용하면 선택한 셀을 변경하기위한 처리기를 추가하는 것보다 :

<DataGrid SelectedCellsChanged="yourGrid_SelectedCellsChanged" ...> 

과의 코드 숨김 파일

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