0

我只是想知道是否有人愿意给我一些建议。

我有一个 DataGridView,其中包含从我的 SQL 数据库中提取的数据。我想了解如何重新排序 DataGridView 中的行。

目前我正在使用等级系统。我的数据库中有一个名为 ListOrder 的字段,它表示它在我的 DGV 中显示的顺序的等级,我使用 ORDER BY ListOrder 以正确的顺序显示它。

每次将新记录添加到数据库时,我都会使用计数查询,然后对新记录 + 1。因此,例如,如果我的表中有 10 条记录,它计数为 10,然后加 + 1,因此新记录等于 11。这样做的问题是,如果我删除了表中的记录,排名就会不正确。另一个例子是我删除了在我的表中留下 9 的第一条记录,但是因为我使用计数,它会在表中计数 9,然后添加 + 1,它的值是 10,这意味着我可以有 2数据库中包含我的 ListOrder 为 10 的记录。(希望这是有道理的)我知道我也可以使用 MAX 查询,但这仍然给我一个类似的问题。

当我删除一条记录时,我需要它重新计算所有记录并将它们保持相同的顺序。

下面是我用来在表中上下移动记录的代码:

v_SelectRow = dgvLine1.CurrentRow.Index
dbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\planner.mdb;")
dbConnection.Open()

strSQL = "UPDATE [Line1Orders] SET [ListOrder] = ListOrder-1  WHERE ([DateTime] = '" & dgvLine1.Item(8, v_SelectRow).Value & "')"

dbCommand = New OleDbCommand(strSQL, dbConnection)
dbCount = dbCommand.ExecuteNonQuery
dbConnection.Close()

由于计数查询,我遇到的另一个问题是,当我从表中删除例如 4、5、6 的记录时,ListOrder 值为 7 的下一条记录需要向上移动 3 次才能移动超越之前的记录。

我希望这是有道理的。如果有人愿意为我指出正确的方向,了解我如何改进当前系统的功能、查询和任何合乎逻辑的想法,我将不胜感激。我将不胜感激。

多谢你们!

4

2 回答 2

1

向您的数据表添加一个自动递增的主键。将 order by 子句添加到您的 SQL 以按您刚刚添加的主键进行排序。

于 2013-04-16T15:18:56.553 回答
1

只是出于好奇——为什么数字需要保持一致?您不能保持计数器递增,然后当您向用户显示它时显示您当时创建的计数器。

您有记录 1、2、3、6、9、10、15 您插入的下一条记录将是 16。当您向用户显示记录时,显示 1、2、3、4、5、6、7、8

您真的需要向客户显示实际排名吗?这个数字对他们重要吗?

于 2013-04-16T15:06:48.467 回答