读取DataGrid上的当前行

时间:2012-09-02 20:20:07

标签: c# wpf datagrid wpf-controls

我使用WPF 4.0和数据网格在c#中创建了一些小应用程序。 我的datagrid绑定到一个对象。

我想在输入一行后进行一些测试,所以,我使用RowEditEnding事件。

这是我的代码

private void dataGrid1_RowEditEnding(object sender, DataGridRowEditEndingEventArgs e)
{
    TableCompte Compte = e.Row.DataContext as TableCompte;

    if (Compte  != null)
    {
       // Verifs
    }
}

我的问题是我的对象是null。

我的错误在哪里?

这是我的XAML声明:

<DataGrid AutoGenerateColumns="false" Name="dataGrid1" AreRowDetailsFrozen="false" Margin="31,227,28,82" RowEditEnding="dataGrid1_RowEditEnding">
    <DataGrid.Columns>
        <DataGridTextColumn Width="134" Header="Compte d'origine" Binding="{Binding Path=m_CompteOrigine, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
        <DataGridTextColumn Width="134" Header="Compte Taux 1" Binding="{Binding Path=m_CompteTaux1, Mode=TwoWay ,UpdateSourceTrigger=PropertyChanged}"  />
        <DataGridTextColumn Width="134" Header="Taux 1" Binding="{Binding Path=m_Taux1, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged }"  />
        <DataGridTextColumn Width="134" Header="Compte Taux 2" Binding="{Binding Path=m_CompteTaux2, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" />
        <DataGridTextColumn Width="134" Header="Taux 2" Binding="{Binding Path=m_Taux2, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged }"  />
        <DataGridTextColumn Width="134" Header="Compte Taux 3" Binding="{Binding Path=m_CompteTaux3, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" />
        <DataGridTextColumn Width="134" Header="Taux 3" Binding="{Binding Path=m_Taux3, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged }"  />
    </DataGrid.Columns>
</DataGrid>

1 个答案:

答案 0 :(得分:0)

此处的问题是,只有在DataContext生成项目时才会设置ItemsSourceItemsSource上应该DataGrid绑定)。
而不是e.Row.DataContext使用e.Row.Item,这将解决您的问题。


更新

因为看起来问题出在演员部分。

TableCompte Compte = e.Row.DataContext as TableCompte;

您应该知道您绑定到DataGrid的类型。 如果您将ObservableCollection<YourClass> FooObservable绑定到ItemsSource,则YourClass应该包含m_CompteTaux1,m_CompteTaux2,m_CompteTaux3,m_CompteTaux4等。并且转换:

var rowDataItem = e.Row.DataContext as YourClass;