0

我在 ASP.NET 端使用带有插入/更新/删除按钮的列表框,当我删除学生时,学生 ID 不再与 ID 列相等。因此,当我删除一个学生时,列表框中的顺序不等于 SQL 端。我怎样才能自动同步这两个?我已将主键和身份规范设置为活动,供您参考。并包括以下问题的屏幕截图。

在此处输入图像描述

4

3 回答 3

1

一个 ASP.NET 列表框应该有一个属性和一个属性。

通常,属性将使用数据库中的 ID 填充...当删除列表框中的选定项时,您将根据属性而不是选定列表框项的索引进行删除。

这是一个快速教程,展示了如何使用键/值对填充列表框

无论您做什么,都不要将数据库中的 ID 重新编号为连续的。这会给你带来巨大的问题。

于 2013-09-05T20:11:49.577 回答
1

ASP.NET 上的列表框项必须由ListBox1.SelectedValue而不是 SelectedIndex 控制。一旦您删除了一个项目并且订单发生了变化,一个项目的 SelectedIndex 可能会发生变化。这样做会很混乱。

但是,ListBox1.SelectedValue将帮助您通过其值(即EmployeeID,而不是SQL表中的顺序来控制每个项目。当您创建一个列表项时,您必须将这种情况下的EmployeeID赋予列表框的HTML值,这将被处理ListBox1.SelectedValue插入或更新项目时

the code when you retrieve data from SQL to the listbox should look like this:

cnn.Open();
SqlCommand cmd = new SqlCommand("SELECT FirstName,LastName,EmployeeID FROM Employees", cnn);
SqlDataReader dr = cmd.ExecuteReader();
if (dr.HasRows)
{
    while (dr.Read())
    {
        ListBox1.Items.Add(new ListItem(dr.GetString(0) + " " + dr.GetString(1),dr.GetInt32(2).ToString()));
    }
}

cnn.Close();
于 2013-09-08T17:29:44.843 回答
0

您所说的“ID 列”实际上只是 SSMS 查询返回的行号。这与返回的记录没有关系,只是它们被返回的顺序。以以下查询为例:

SELECT * FROM ali ORDER BY OgrenciID ASC

SELECT * FROM ali ORDER BY OgrenciID DESC

两个查询都返回相同的数据,只是顺序不同。SQL 没有“保证”的方式来对数据进行排序,除非您提供 order by。这意味着在输入足够的数据后,您的查询不会总是显示 1、2、3。相反,它可能会显示 1、3、2,除非您另有说明。

拥有标识列的目的是确保每一行数据都有一个唯一的 ID。假设您有第二个名为 Permissions 的表,它通过 OgrenciID 链接到该表。如果用户 1 被删除,您不希望用户 2 获得用户 1 的权限。

如果要从该表中删除所有数据并将 ID 列重置为 1,则必须在删除记录后截断表或重置键。但是,这将需要彻底擦除桌子。

于 2013-09-05T20:19:53.437 回答