2017-06-22 17 views
1

実行時にDataTableをWPF DataGridにバインドしようとしています。コードは次のようになります。System.Windows.Dataエラー:17:RowNotInTableException

DataTable c_tblData; 

public MainWindow() 
{ 
    InitializeComponent(); 
    c_tblData = new DataTable("tblData"); 
    c_tblData.Columns.Add("Id", typeof(int)); 
    c_tblData.Columns.Add("Description", typeof(string)); 
    c_tblData.Columns.Add("OK", typeof(bool)); 
    dgrData.ItemsSource = c_tblData.DefaultView; 
} 

私は他のコードがありません。 XAMLも非常に簡単です。

<Window x:Class="Test_DataGrid.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:local="clr-namespace:Test_DataGrid" 
     mc:Ignorable="d" 
     Title="MainWindow" Height="350" Width="525"> 
    <Grid> 
     <DataGrid Name="dgrData" /> 
    </Grid> 
</Window> 

新しい行を挿入して更新することは問題ありません。私は二回ESCキーを押して、新しい行を追加し中止しようとすると、ビット、私は(唯一のイミディエイトウィンドウに)次のエラーを取得する:

System.Windows.Data Error: 17 : Cannot get 'OK' value (type 'Boolean') from '' (type 'DataRowView'). BindingExpression:Path=OK; DataItem='DataRowView' (HashCode=26031876); target element is 'CheckBox' (Name=''); target property is 'IsChecked' (type 'Nullable`1') RowNotInTableException:'System.Data.RowNotInTableException: Diese Zeile wurde aus einer Tabelle entfernt und enthält keine Daten. BeginEdit() ermöglicht das Erstellen von neuen Daten in dieser Zeile. 

は、なぜ私はこのエラーが出るんし、どのように私は取り除くことができますそれ?私は話題について広範な調査をしたが、結論に至らなかった。

答えて

0

この例外は無視しても問題ありません。それは無害ですでにあなたのために処理されています。

あなたがDataTableではありませんが、あなたはの動作を無効にしない限り、あなたが本当にどのように、いつDataGridコントロール制御DataTableに行を追加したり、削除することはできませんDataRowで操作を実行しようとすると、例外がスローされます何とかESCキー入力:

private void dgrData_PreviewKeyDown(object sender, KeyEventArgs e) 
{ 
    e.Handled = e.Key == Key.Escape; 
} 

しかし、実際にこれに必要はありません。

+0

提案のように振る舞いを無効にすると、実際にはエラーが表示されなくなります。しかし、私はもはやセルの編集も行の追加も中断することができません。したがって、それは解決策ではありません...もちろん、私はエラーを無視することができますが、私はそれが迷惑なとそれを取り除くことが本当に好きです。 –

+0

それは私が何を意味するか。 *無害で、あなたのコードと関係がないため、この例外については気にしないでください。あなたはもっと重要なことに集中すべきです:) – mm8

関連する問題