2013-12-12 98 views
1

我有一个数据网格通过数据绑定实体框架链接到数据库。它有3列,当应用程序运行时,用户可以直接在数据网格中添加新行。继XAML代码:如何在运行时获取datagrid单元格值(C#WPF)?

<DataGrid Name="dataGridIMP" Height="115" HorizontalAlignment="Left" VerticalAlignment="Top" AutoGenerateColumns="False" 
    GridLinesVisibility="None" ItemsSource="{Binding}" CellEditEnding="dataGridIMP_CellEditEnding"> 
<DataGrid.Columns> 
    <DataGridComboBoxColumn Header="Importação" x:Name="colunaImp" DisplayMemberPath="Ref" 
      SelectedValuePath="OID" SelectedValueBinding="{Binding Path=OIDImportacao}" /> 
    <DataGridComboBoxColumn Header="Finalidade Pag" x:Name="colunaFinalidade" DisplayMemberPath="Nome" 
      SelectedValuePath="OID" SelectedValueBinding="{Binding Path=OIDTipoPagamento}"/> 
    <DataGridTextColumn Header="Valor" Width="100" Binding="{Binding Path=ValorPorImportacao, Converter={StaticResource ConvDolarTexto}}"/> 
</DataGrid.Columns> 

在运行时,用户从DataGrid的前两列(DataGridComboBoxColumns)的组合框选择数据后,应用程序应该从细胞(列),这些信息,执行一些免费的查询/计算,并填写第三列的建议值。

我已经尝试通过获取对象的实体价值做:

var rel = dataGridIMP.SelectedItem as RelacaoImpCboFIN; 
int val1 = rel.OIDImportacao    //get the first column value (using entity object) 
int val2 = rel.OIDTipoPagamento    //get the second column value (using entity object) 

rel.ValorPorImportacao = somevalue   //set the third column value (using entity object) 

但用户进入到下一行之后的数据才会被分配到实体对象。有谁知道如何才能在用户编辑每个单元格后获取datagrid列(单元格)值?

回答

0

您是否尝试过CellEditEnding事件? eventargs有一个'EditingElement'属性,它会给你实际的编辑元素(在这种情况下是ComboBox),你可以用它来找到单元格中的'SelectedValue'。

+0

谢谢,工作完美!!!! – rafilho

+0

嗨Ajs,你的解决方案工作正常,以获得正在编辑的单元格的值。是否有一种方法可以同时从同一行中的另一个单元获取值? – rafilho

+0

我相信'e.Row.DataContext'将实际的绑定对象返回给该行。您可以使用它来访问所有必需的属性。 – AjS

相关问题