2012-09-03 48 views
0

我在c#中用WPF 4.0和一個數據網格創建了一個小應用程序。 我的數據網格綁定到某些「數據表」組件的數據成員CAST DataGridView錯誤

我想在輸入一行後做一些測試,所以我使用RowEditEnding事件。

這裏是我的代碼

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

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

我的問題是我的目標 「孔特」 爲空。

不過,我的「DataContext」價值很不錯!所以這是一個演員錯誤,但我的錯誤在哪裏?

這裏是我的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

調試器?檢查'e.Row.DataContext'? –

+0

什麼是dataGrid1的ItemsSource?它是一個數據表? –

+0

e.row.dataContext是正確的!這就是爲什麼我知道這是一個Cast Error。 –

回答

1

e.Row.DataContext包含的行,而不是DataGrid的數據源的項目源。

因此它將會是以前的所有,包括m_CompteOrigine,m_CompteTaux1,m_CompteTaux2等。
它們是否都具有相同的類型或接口?

您應該轉換爲項目源的公共類型/接口。

假設:

Compte m_CompteOrigine; 
Compte m_CompteTaux1; 

然後做:

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

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

如果您仍然有問題。嘗試調試並在賦值語句中設置斷點。然後使用調試器檢查e.Row.DataContext;它會告訴你它的類型。

祝你好運