System.Windows.Data错误:17:RowNotInTableException

时间:2017-06-22 08:49:53

标签: c# wpf data-binding

我正在尝试在运行时将DataTable绑定到WPF DataGrid。代码如下:

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.

为什么我会收到此错误,如何摆脱它?我对这个主题进行了广泛的搜索,但没有得出结论。

1 个答案:

答案 0 :(得分:0)

您可以放心地忽略此异常。它已经无害并且已经为您处理过了。

当您尝试对不在DataRow中的DataTable执行操作但是您无法控制DataGrid控件的方式和时间时,会引发异常向DataTable添加或删除行,除非您以某种方式覆盖ESC按键的行为:

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

但真的没有必要这样做。