在datagridview / w数据集中交换数据库中的值

时间:2013-10-09 09:23:48

标签: c# sql-server database datagridview

我有一个关于在数据库表中交换几个值的问题。

我要建立的是一个显示调查的网站(在ASP.net中)。问题将存储在名为SURVEY_QUESTIONS的表中(在SQL Server中)。

该表格包含以下列:

  • survey_question_id(int)
  • 问题(字符串)
  • type(string)
  • active(bool)
  • order(int)

现在,问题将存储在问题栏中,例如:

  

您对目前的情况满意吗?

该类型将是多项选择或开放列。活动表示如果活动,则只有问题才会显示在调查中。我遇到的问题是最后一列order。我想从最低到最高的顺序排列问题。因此,如果我有5个问题,根据订单栏1,2,3,4,5可以很好地订购。

我有一个C#(Winforms)应用程序,我在其中添加问题并进行编辑。我在datagridview中执行此操作,并使用数据集填充网格视图。例如,当我按下保存按钮时,datagridview中的更改将更新到我的数据库。

现在让我们说问题1的订单号为3,问题5的订单号为1.我希望问题一是显示的第一个,这意味着它的订单号应为1.但在这种情况下,问题五已经有了订单号,我想要的是每当“占用”订单号被分配给另一个问题时,他们的订单号就会交换。

我在保存按钮后面有以下代码来更新到数据库:

DialogResult dr = MessageBox.Show("Are you sure want to edit a question?", "Message", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Information);

if (dr == DialogResult.Yes)
{
    this.SURVEY_QUESTIONTableAdapter.Update(_PVB1314_005DataSet.SURVEY_QUESTION);
    datagridviewTest.Refresh();
    MessageBox.Show("Database updated");
}

我希望有人可以帮助我解决这个问题,提前谢谢。

1 个答案:

答案 0 :(得分:0)

您需要开始使用存储过程。在您的代码中,您有一个显示“数据库已更新”的消息框。你怎么知道数据库已更新?你甚至没有在try catch块中获得代码。

编写一个存储过程,其中包含要更新的QuestionID的输入参数以及要将其更新到的OrderID。然后,您可以轻松测试所需的OrderID是否已被使用,如果没有,则运行更新语句。

如果它正在使用,并且您的订单列不允许重复值,您可能必须临时分配要使用临时值(可能为-1)的OrderID的行,存储您行的当前OrderID想要更改变量,使用正确的OrderID更新要更改其OrderID的行,然后使用临时存储的OrderID将刚刚更改的OrderID更新为-1。