我有一个StackPanel
与 aDataGrid
绑定的 aDataSet
和一个Grid
在DataGrid
底部底部的a StackPanel
。在Grid
用户更改. Button
_ DataAdapter
_DataSet
DataGrid
这主要按预期工作,但并非总是如此。
我的期望是每当我单击按钮时都会调用事件处理程序。如果我更改数据网格中的现有行然后单击按钮,或者如果我在网格的最后(空)行中输入值,然后按 enter 最后单击按钮,这确实有效。如果我在网格的最后一行输入值并且不按回车键,则单击该按钮会在数据网格的底部产生一个新的(空)行,并且不会调用事件处理程序。仅通过再次单击它来调用事件处理程序。为什么是这样?我可以改变这个吗?
我的第一个怀疑是DataSet
需要以某种方式通知新数据,但是如果我添加一个新行,按 Enter 并添加第二个新行,那么按钮单击也不会导致调用事件处理程序,这意味着我的怀疑并不能解释这种行为。
这是使用 Visual Studio Express 2012
这是XAML
:
<Window x:Class="AppVer0._01.ProducerWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Producer" Height="300" Width="300">
<StackPanel>
<DataGrid ItemsSource="{Binding producer}"
AutoGenerateColumns="True"
HorizontalAlignment="Left"
Name="producerDataGrid"
/>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="100"/>
</Grid.ColumnDefinitions>
<Button Name="buttonUpdate" Click="buttonUpdate_Click_1">Aktualisieren</Button>
</Grid>
</StackPanel>
</Window>
(我计划添加更多按钮,因此网格有更多列)后面的代码(用于`Window)定义绑定如下:
DataSet ds = new DataSet();
// ...
// load data from adapter into dataset
//
this.DataContext = ds;
当然,还有定义的事件处理程序。
编辑:如果重要,窗口被称为对话框。