の下部ににバインドさStackPanel
れDataGrid
たDataSet
とがあります。ユーザーがのコンテンツを変更した後、に関連付けられたを更新するために使用したいを保持します。Grid
DataGrid
StackPanel
Grid
Button
DataAdapter
DataSet
DataGrid
これはほとんど期待どおりに機能しますが、常に機能するとは限りません。
私の期待は、ボタンをクリックするたびにイベントハンドラーが呼び出されることです。これは、データグリッドの既存の行を変更してボタンをクリックするか、グリッドの最後の(空の)行に値を入力してEnterキーを押し、最後にボタンをクリックした場合に機能します。グリッドの最後の行に値を入力し、Enterキーを押さない場合、ボタンをクリックすると、データグリッドの下部に新しい(空の)行が表示され、イベントハンドラーは呼び出されません。もう一度クリックするだけで、イベントハンドラーが呼び出されます。どうしてこれなの?これを変更できますか?
私の最初の疑いは、DataSet
どういうわけか新しいデータについて通知する必要があるということでしたが、新しい行を追加し、Enterキーを押して、2番目の新しい行を追加すると、ボタンをクリックしてもイベントハンドラーが呼び出されません。私の疑惑はその行動を説明していません。
これはVisualStudioExpress2012を使用しています
これが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;
もちろん、イベントハンドラーが定義されています。
編集:重要な場合、ウィンドウはダイアログとして呼び出されます。