私はC#でかなり新しいです。データグリッドを使用してテーブル データを表示する小さな GUI データベース アプリケーションを作成していました。グリッドの行を編集すると、更新ボタンを押して、tableadapter の更新機能が呼び出され、変更が DB に反映されます。次に、テーブルアダプターの更新関数を呼び出す行変更イベントのハンドラーを実装しました。ただし、今回は値が変更されて Enter キーが押されると、ハンドラーが呼び出され、「このコマンドに関連付けられた開いている DataReader が既に存在するため、最初に閉じる必要があります」というメッセージとともに InvalidOperationException が発生します。とにかくデータベースは変更されます。発生する例外を停止する方法。接続文字列で複数のアクティブな結果セットを true に設定しています。
コンストラクター
public WSim(MainWindow h)
{
InitializeComponent();
//database connection with strongly typed dataset
usersAdapter = new testDBDataSetTableAdapters.usersTableAdapter();
users = usersAdapter.GetUsers();
users.usersRowChanged +=new testDBDataSet.usersRowChangeEventHandler(users_usersRowChanged);
this.DataContext = users.DefaultView;
}
行変更イベント ハンドラ
private void users_usersRowChanged(object sender, testDBDataSet.usersRowChangeEvent e)
{
output.Content = "Row Modified";
usersAdapter.Update(users);
}
データグリッド xaml
<DataGrid Height="200" HorizontalAlignment="Left" Margin="26,249,0,0" Name="userGrid" VerticalAlignment="Top" Width="381" AutoGenerateColumns="True"
SelectionMode="Extended" SelectionUnit="FullRow" ItemsSource="{Binding}"
CanUserReorderColumns="True" CanUserResizeColumns="True" CanUserSortColumns="True"
CanUserAddRows="True" CanUserDeleteRows="True"/>