【问题标题】:How can I get datagrid cell value in runtime (C# WPF)?如何在运行时获取数据网格单元格值(C# WPF)?
【发布时间】:2013-12-12 17:51:34
【问题描述】:

我有一个通过实体框架的数据绑定链接到数据库的数据网格。它有 3 列,当应用程序运行时,用户可以直接在数据网格中添加新行。按照xaml代码:

<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>

在运行时,用户从数据网格的前两列(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)

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

【问题讨论】:

    标签: c# wpf datagrid


    【解决方案1】:

    您尝试过 CellEditEnding 事件吗? eventargs 有一个“EditingElement”属性,它将为您提供实际的编辑元素(在本例中为 ComboBox),您可以使用它在单元格中找到“SelectedValue”。

    【讨论】:

    • 嗨 AjS,您的解决方案可以很好地获取正在编辑的单元格的值。有没有一种方法可以同时从同一行的另一个单元格中获取值?
    • 我相信 'e.Row.DataContext' 将实际绑定对象返回到行。您可以使用它来访问所有必需的属性。
    猜你喜欢
    • 1970-01-01
    • 2019-12-31
    • 2010-12-06
    • 1970-01-01
    • 2017-11-16
    • 2018-02-13
    • 2012-06-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多