我在gridview中有这个表。
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
我想在页面中添加一个删除按钮,其工作原理如下:当我删除其中一条记录时,我想自动更新所有问题的question_no,只要survey_ID为44即可。例如,如果我删除第二个问题,它会变成这样。
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...";
}
}
答案 0 :(得分:2)
可以使用单个更新语句完成此操作。
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
答案 1 :(得分:1)
您只需要一个查询db表并将结果集绑定/绑定到gridview的函数。然后,当您删除问题并将其从数据库中删除时,请调用该函数并将gridview重新绑定到新结果集。
您可以在SQL查询中使用partition ROW_NUMBER来创建行号的连续列。您可以查看其中的一些示例来帮助您执行此操作。