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