0

私は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"/>
4

1 に答える 1

0

例外が示すように、最初にリーダーを閉じる必要があります。十分な情報が提供されていないため、これ以上説明することはできません。しかし、このリンクを参照してください。役立つと思います。

于 2012-12-24T08:03:20.213 に答える