0

私はクエリ データベースからの結果を示す C# の datagridview を持っています。データを削除したいのですが、このメソッドは DataSet を使用しています。このメソッドは、あるインデックスでボタンが押されたときに実行されます。

コード:

DialogResult _result = MessageBox.Show("Do you want to remove the data?", "Warning", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning);
if (_result == DialogResult.OK) 
{
    int idx = dataGridInfo.CurrentRow.Index;
    this.getInfoFilmDS.sp_getInfo.Rows.RemoveAt(idx);
    MessageBox.Show("Data Removed", "Processing", MessageBoxButtons.OK, MessageBoxIcon.Information);
}

この方法

this.getInfoFilmDS.sp_getInfo.Rows.RemoveAt(idx);

DataGridView でのみ機能していますが、データ自体はデータベースで削除されません。

これを解決するには?

前もって感謝します。

UPDATE私はこれに構文を変更しました:

this.getInfoFilmDS.sp_getInfo.Rows[idx].Delete();
sp_getInfoTableAdapter.Adapter.Update(getInfoFilmDS);

しかし、コンパイラはエラーをスローします。

Invalid Operation Exception Update requires a valid DeleteCommand when passed DataRow collection with deleted rows.
4

2 に答える 2

0

調査後、@Tim にサポートを依頼したところ、DataSet がストアド プロシージャに基づいてクエリを生成していないことがわかりました (私が間違っていた場合はお知らせください:D)。そのため、JOIN テーブルに基づいて別のストアド プロシージャを生成する必要があります。

MySQL データベースには 3 つのテーブルがあり、別のストアド プロシージャを作成してデータを削除します。次に、DELETE ストアド プロシージャをデータセット構成に割り当てます

次に、このコードを適用しました

try
            {
                int idx = dataGridInfo.CurrentRow.Index;
                this.getInfoFilmDS.sp_getInfo.Rows[idx].Delete();
                sp_getInfoTableAdapter.Adapter.Update(getInfoFilmDS);
                MessageBox.Show("Data removed", "Process", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error Delete Data" + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

それは魅力のように機能します。

于 2013-01-02T12:37:06.197 に答える
0

DataRowCollection.RemoveAtから行を削除するだけで、行をDataTable削除しません ( を使用したとしてもDataAdapter)。したがって、次を使用する必要がありますDataRow.Delete

getInfoFilmDS.sp_getInfo.Rows[idx].Delete();

の変更をデータベースDataAdapterにコミットするには、 を使用する必要があることに注意してください。DataSet

アップデート

構文を次のように変更しました。

this.getInfoFilmDS.sp_getInfo.Rows[idx].Delete();
sp_getInfoTableAdapter.Adapter.Update(getInfoFilmDS);

しかし、コンパイラはエラーをスローします:

無効な操作の例外。削除された行を含む DataRow コレクションを渡す場合、Update には有効な DeleteCommand が必要です。

そのため、テーブルを 1 つだけ選択した場合DeleteCommand、通常は から自動生成されるを定義する必要があります。おそらく を再構成するだけで、削除コマンドが自動作成されます。それ以外の場合は、手動で作成する必要があります:DataSetTableAdapter

TableAdapter の概要

于 2013-01-02T10:48:14.937 に答える