0

wpf のデータグリッド内の列に対して、ロスト フォーカス イベントを実装したいと考えています。CellEditEnding イベントを使用しましたが、これは編集の最後ではなく開始時に発生しています。誰か助けてください。

4

3 に答える 3

1

Esam Works が提供するソリューションには、少し編集が必要です。

XAML は同じままです。

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

適応するコードビハインド:

private void OnCellLostFocus(object sender, RoutedEventArgs e)
    {
        var myCell = sender as DataGridCell;
        if (myCell.Column.Header.ToString() == "Name of the column")
        {
            MessageBox.Show("tralala. I got it");
            //do whatever needed here
        }
    }
于 2018-11-21T16:26:54.140 に答える
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;
        }
于 2012-10-15T09:23:39.500 に答える