0

I already can delete the database and wanted to show the error when there is no data in the selected row (datagridview), but it is only work for the first time when user not entering any data (or the datagridview still have empty row).

private void DeleteDatabase(object sender, EventArgs e)
{
    DataTable dt = (DataTable)dataGridView1.DataSource;

    if (dt.Rows.Count > 0)
    {
        int rowNum = dataGridView1.CurrentRow.Index;
        int id = Convert.ToInt32(dt.DefaultView[rowNum]["ID"]);
        dt.DefaultView[rowNum].Delete();

        using (OleDbConnection conn = new OleDbConnection(connectionString))
        {
            string query = "DELETE FROM [Table] WHERE [ID] = @ID";
            conn.Open();

            using (OleDbCommand cmd = new OleDbCommand(query, conn))
            {
                cmd.Parameters.AddWithValue("@ID", id);
                cmd.ExecuteNonQuery();
            }

            conn.Close();
        }
    }

    else if (dt.Rows.Count <= 0)
    {
        if (choice.comboBox1.Text == "English")
        {
            System.Media.SoundPlayer sounds = new System.Media.SoundPlayer(@"C:\Windows\Media\Windows Exclamation.wav");
            sounds.Play();
            MessageBox.Show("There is no Data in the Selected Row!", "Error");
            return;
        }
    }

    if (choice.comboBox1.Text == "English")
    {
        System.Media.SoundPlayer sounds = new System.Media.SoundPlayer(@"C:\Windows\Media\Windows Exclamation.wav");
        sounds.Play();
        MessageBox.Show("Deleted Successfully!", "Deleted");
    }
}

When user entering data, and delete it. The data deleted successfully, but when user click "delete" button again after user deleted data, it is gave error like the title.

These below are the screenshots (i mixed 3 screenshots into 1 image):

ここに画像の説明を入力

----スクリーンショット1(左画像)の説明-----:

午前12時38分にプログラムを実行し、「削除」ボタンをクリックすると、上記のスクリーンショット(1)のようになりました(注:正しいです)。

-----スクリーンショット 2 (中央の画像) の説明-----:

プログラムは午前 12 時 39 分にまだアクティブで、すべて問題ありません (選択した行にデータがあるため、データが追加され、「削除」機能が実行されます)。

----スクリーンショット3(右画像)の説明-----:

プログラムは午前 12 時 40 分にまだアクティブで、以前のデータ (スクリーンショット 2 を参照) は削除され、選択した行は再び空になり、「削除」ボタンをクリックすると、スクリーンショット 1 のようにメッセージ ボックスが表示されませんでした。ただし、同じエラーが発生しました。(これは私が直面している問題です)。

注: 画像サイズが小さくて申し訳ありません。

There is no data in the selected row問題は次のとおりです。ユーザーがデータを入力していないときに、ユーザーが「削除」ボタンをクリックするとメッセージボックスが実行されるのはなぜですか。ただし、ユーザーがデータを入力すると (データが最初の行に入力され、最初の行で選択が完全な行になるとしましょう)、[削除] ボタンをクリックすると、選択した行のデータが削除され、ユーザーがもう一度「削除」をクリックすると、のメッセージボックスは表示されませんでしたがThere is no data in the selected row、タイトルのようなエラーが表示されました。

4

1 に答える 1

1

は必要ありませんelse if

試す:

private void DeleteDatabase(object sender, EventArgs e)
{
    DataTable dt = (DataTable)dataGridView1.DataSource;

    if (dt.Rows.Count > 0)
    {
        int rowNum = dataGridView1.CurrentRow.Index;
        int id = Convert.ToInt32(dt.DefaultView[rowNum]["ID"]);
        dt.DefaultView[rowNum].Delete();

        using (OleDbConnection conn = new OleDbConnection(connectionString))
        {
            string query = "DELETE FROM [Table] WHERE [ID] = @ID";
            conn.Open();

            using (OleDbCommand cmd = new OleDbCommand(query, conn))
            {
                cmd.Parameters.AddWithValue("@ID", id);
                cmd.ExecuteNonQuery();
            }

            conn.Close();
        }

        if (choice.comboBox1.Text == "English")
        { 
            System.Media.SoundPlayer sounds = new System.Media.SoundPlayer(@"C:\Windows\Media\Windows Exclamation.wav");
            sounds.Play();
            MessageBox.Show("Deleted Successfully!", "Deleted");
        }
    }
    else // count is 0
    {
        if (choice.comboBox1.Text == "English")
        {
            System.Media.SoundPlayer sounds = new System.Media.SoundPlayer(@"C:\Windows\Media\Windows Exclamation.wav");
            sounds.Play();
            MessageBox.Show("There is no Data in the Selected Row!", "Error");
            // return; (this return is redundant as we're at the end of the method.)
        }
    }
}

あなたの問題は、あなたが電話をかけた場所にある可能性もありますDeleteDatabase()

于 2013-09-15T18:21:13.200 に答える