我正在尝试在运行时将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.
为什么我会收到此错误,如何摆脱它?我对这个主题进行了广泛的搜索,但没有得出结论。
答案 0 :(得分:0)
您可以放心地忽略此异常。它已经无害并且已经为您处理过了。
当您尝试对不在DataRow
中的DataTable
执行操作但是您无法控制DataGrid
控件的方式和时间时,会引发异常向DataTable
添加或删除行,除非您以某种方式覆盖ESC
按键的行为:
private void dgrData_PreviewKeyDown(object sender, KeyEventArgs e)
{
e.Handled = e.Key == Key.Escape;
}
但真的没有必要这样做。