2012-10-15 28 views
0

我想要为wpf中的数据网格中的列实施失去焦点事件。我已经使用了CellEditEnding事件,但是在开始编辑时不会在最后引发这个事件。请有人帮助我。数据网格中的Lostfocus事件

回答

0

我已经使用该事件,它的工作完美。 我的XAML代码看起来像

<DataGrid AutoGenerateColumns="False" Height="256" HorizontalAlignment="Left" Name="dgEmp" VerticalAlignment="Top" Width="490" ItemsSource="{Binding DeleteDate,Mode=TwoWay}" Margin="6,7,0,0" CanUserDeleteRows="True" RowEditEnding="dgEmp_RowEditEnding" CellEditEnding="dgEmp_CellEditEnding" Grid.RowSpan="3"> 
        <DataGrid.Columns> 
         <DataGridTextColumn Header="ID" Binding="{Binding ID,Mode=TwoWay}" IsReadOnly="True" Visibility="Hidden"/> 
         <DataGridTextColumn Header="Description" Binding="{Binding Description,Mode=TwoWay}" IsReadOnly="True"/> 
         <DataGridTextColumn Header="Amount" Binding="{Binding Amount,Mode=TwoWay}" IsReadOnly="True"/> 
         <DataGridTextColumn Header="Date" Binding="{Binding Date,Mode=TwoWay}" IsReadOnly="True"/> 
         <DataGridTextColumn Header="Remark" Binding="{Binding Remark,Mode=TwoWay}" IsReadOnly="True"/> 
         <DataGridTemplateColumn> 
          <DataGridTemplateColumn.CellTemplate> 
           <DataTemplate> 
            <Button Content="Update" x:Name="btnUpdate" 
          Click="btnUpdate_Click"></Button> 
           </DataTemplate> 
          </DataGridTemplateColumn.CellTemplate> 
         </DataGridTemplateColumn> 
         <DataGridTemplateColumn> 
          <DataGridTemplateColumn.CellTemplate> 
           <DataTemplate> 
            <Button Content="Delete" x:Name="btnDelete" 
          Click="btnDelete_Click"></Button> 
           </DataTemplate> 
          </DataGridTemplateColumn.CellTemplate> 
         </DataGridTemplateColumn> 
        </DataGrid.Columns> 
       </DataGrid> 
在我的.cs

文件中的代码看起来像

private void dgEmp_RowEditEnding(object sender, DataGridRowEditEndingEventArgs e) 
     { 
     var update = from p in Context.Expense_Submits where p.ID == objEmpToEdit.ID select p; 
     foreach (var item in update) 
      { 
      item.ID = objEmpToEdit.ID; 
      item.Description = objEmpToEdit.Description; 
      item.Date = objEmpToEdit.Date; 
      item.Amount = objEmpToEdit.Amount; 
      item.Remark = objEmpToEdit.Remark; 
      } 
     Context.SubmitChanges(); 
     MessageBox.Show("The Current row updation is complete.."); 
     } 


    private void dgEmp_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e) 
     { 

     if (isUpdateMode) //The Row is edited 
      { 
      Expense_Submit exp_sub = (from exp in submit where exp.ID == objEmpToEdit.ID select exp).FirstOrDefault(); 
      FrameworkElement element_1 = dgEmp.Columns[1].GetCellContent(e.Row); 
      if (element_1.GetType() == typeof(TextBox)) 
       { 
       var Description = ((TextBox)element_1).Text; 
       objEmpToEdit.Description = Description.ToString(); 

       } 

      FrameworkElement element_2 = dgEmp.Columns[2].GetCellContent(e.Row); 
      if (element_2.GetType() == typeof(TextBox)) 
       { 
       var Amount = ((TextBox)element_2).Text; 
       objEmpToEdit.Amount = Amount.ToString(); 
       } 

      FrameworkElement element_3 = dgEmp.Columns[3].GetCellContent(e.Row); 
      if (element_3.GetType() == typeof(TextBox)) 
       { 
       var Date = ((TextBox)element_3).Text; 
       objEmpToEdit.Date = Convert.ToDateTime(Date); 
       } 

      FrameworkElement element_4 = dgEmp.Columns[4].GetCellContent(e.Row); 
      if (element_4.GetType() == typeof(TextBox)) 
       { 
       var Remark = ((TextBox)element_4).Text; 
       objEmpToEdit.Remark = Remark.ToString(); 
       } 


      } 


     } 
private void dgEmp_SelectionChanged(object sender, SelectionChangedEventArgs e) 
     { 
     objEmpToEdit = dgEmp.SelectedItem as Expense_Submit; 
     } 
0

为什么不使用对细胞LostFocus事件,然后检查小区属于你想要的列。

例如:

<DataGrid.CellStyle> 
    <Style TargetType="{x:Type DataGridCell}"> 
     <EventSetter Event="LostFocus" Handler="OnCellLostFocus"/> 
    </Style> 
</DataGrid.CellStyle> 

然后,在该处理程序:

private void OnCellLostFocus(object sender, RoutedEventArgs e) 
    { 
     if (((DataGridCell)sender).Column.Header == "My Column") 
      //do stuff 
    }