-4

このテーブルはグリッドビューにあります。

ID     Question_No          Question             Survey_ID
-----------------------------------------------------------

 1         1            Whats you name?             44
 2         2            How Old Are you?            44
 3         3       Whats your favorite hobby        44
 4         4          What did you study?           44 

次のように機能するページに削除ボタンを追加したい:これらのレコードの1つを削除するとき、survey_IDが44である限り、すべての質問のquestion_noを自動的に更新したい。たとえば、2番目を削除した場合質問、それはこのようになるでしょう。

    ID     Question_No          Question             Survey_ID
-----------------------------------------------------------

     1         1            Whats you name?             44
     3         2       Whats your favorite hobby        44
     4         3          What did you study?           44 

どうすればこれを行うことができますか?ループに違いないと思いましたが、どうやってアプローチすればいいのかわかりません。

編集:これは私の削除ボタンコードです

protected void RemoveQuestionButton_Click(object sender, EventArgs e)
        {
            try
            {
                DataRowView r;
                r = ((DataRowView)QuestionsGridView.GetRow(QuestionsGridView.FocusedRowIndex));
                Session["Question_ID"] = r[0];

                if (Session["Question_ID"] != null)
                {
                    SqlConnection connection = DatabaseConnection.GetSurveySystemConnection();
                    string delStatement1 = "DELETE FROM Questions WHERE ID =" + Session["Question_ID"];
                    string delStatement2 = "DELETE FROM Question_Options where Question_ID=" + Session["Question_ID"];
                    SqlCommand cmd = new SqlCommand(delStatement1, connection);
                    SqlCommand cmd2 = new SqlCommand(delStatement2, connection);
                    cmd.CommandType = CommandType.Text;
                    cmd2.CommandType = CommandType.Text;

                    try
                    {
                        cmd2.ExecuteNonQuery();
                        cmd.ExecuteNonQuery();
                        ConfirmLbl.ForeColor = System.Drawing.ColorTranslator.FromHtml("Green");
                        ConfirmLbl.Text = "Question & Options Deleted Successfully!";
                        QuestionsGridView.DataBind();

                    }
                    catch (Exception)
                    {
                        ConfirmLbl.ForeColor = System.Drawing.ColorTranslator.FromHtml("red");
                        ConfirmLbl.Text = "This Question Has Options Linked to it...";
                    }
                    finally
                    {
                        connection.Close();

                    }
                }
            }
            catch (Exception)
            {
                ConfirmLbl.ForeColor = System.Drawing.ColorTranslator.FromHtml("red");
                ConfirmLbl.Text = "You need to select a Question to edit...";
            }
        }
4

2 に答える 2

2

これは、単一の update ステートメントで実行できます。

delete from question
   where id = 2;

with new_order as (
   select row_number() over (partition by survey_id order by question_no) as new_question_no,
          question_no as old_question_no, 
          id
   from question
) 
update question 
  set question_no = nq.new_question_no
from new_order nq
where nq.id = question.id
  and survey_id = 44;

commit;

SQLFiddle の例を次に示します: http://sqlfiddle.com/#!6/0a1e7/1

于 2012-12-17T18:11:14.533 に答える
1

必要なのは、db テーブルをクエリし、結果セットをグリッドビューに設定/バインドする関数だけです。次に、質問を削除してデータベースから削除するときに、その関数を呼び出して、グリッドビューを新しい結果セットに再バインドします。

SQLクエリでパーティション ROW_NUMBERを使用して、行番号の連続した列を作成できます。これを実行するのに役立ついくつかの例を見ることができます。

于 2012-12-17T18:41:21.567 に答える