我需要的想法...排序列表中的项目的子集
我有一个扭曲的经典场景,包含以下表:用户,角色,UsersInRoles。
在我的网页中,我有一些Comboboxes(即DropDownList + TextBox),每个角色都包含该特定角色的所有用户。我想他们每个人的牵制,而不是为所有用户的完整列表,但分组,并下令像这样......
- 用户只给定角色(按名称排序) - 我的目的是为了突出这些项目。
- 用户的其余部分,不重复(按名称排序)
我一直在与一些SQL玩弄和VB努力工作,我的方式向一个解决方案,但目前尚不清楚这是最好的方法,以及如何全面实施解决方案。我只想出了一些小零件。请原谅我现在禁止发布任何代码。我希望有一些新的想法和一个聪明的解决方案,不会给服务器带来很多需求。
为了帮助您提供相关的建议,这里是我的表的结构:
Users (ID, Username, Name)
Roles (ID, Role)
UsersInRoles (ID, UserID, RoleID)
我写信给该查询给了我,我需要去的地步,我想我觉得所有的亚组。
select u.ID, Name, RoleID from UsersInRoles
inner join Users u on UserID = u.ID --This is only to return a name rather than ID
order by ReviewerRoleID, Name
使用由Tim建议,我可能会使用一些代码隐藏像这样绑定到每个相应的下拉列表中。我担心的一个问题是,我正在为每个角色执行查询,每当用户访问页面时,这会对服务器造成潜在的负担。
Private Sub PopulateUserInRoleCombobox(ByVal key As Integer, ByVal ddl As DropDownList)
Try
Dim dt As New DataTable
Using connection As New SqlConnection(ConfigurationManager.ConnectionStrings("tcomConnectionString").ConnectionString)
Dim spSelect As New SqlCommand("spGetUserInRoleList", connection)
spSelect.CommandType = CommandType.StoredProcedure
Dim RoleID As New SqlParameter("@GivenRoleID", SqlDbType.Int)
RoleID.Value = key
spSelect.Parameters.Add(RoleID)
Dim da As New SqlDataAdapter(spSelect)
da.Fill(dt)
End Using
ddl.DataSource = dt
ddl.DataBind() 'Bind results to the DropDownList
Catch ex As Exception
'Error Message
End Try
End Sub
而最后一步是要弄清楚如何最好地编写JavaScript的造型取决于每个项目,如果是给定的角色或不是的成员。 >。 <
谢谢:)
感谢蒂姆,你能不能说清了一下好吗?把你的建议映射到我的数据库的结构有点麻烦。另外,这对我的总体目标没有帮助。我会很感激,如果你可以重新读我的问题:( – Chiramisu 2012-01-27 20:47:49
你没有提及什么样的结构或事件你使用的是什么样的dbms所以我假设SQL-Server和使用默认结构时,使用SQL成员资格提供者这个sql-query返回所有的用户名和他们的角色,顺序为1.给定的RoleID作为SqlParameter 2.用户名。因此,属于某个特定组的用户将首先(按他们的名字进行排序)。不属于这个组的用户如下(按他们的名字进行排序)。没有重复的用户(由'WHERE UserRoleNumber = 1'引起)。当前组将始终列出(如果用户属于该组)。 – 2012-01-27 21:10:25
我非常喜欢这个解决方案,以获取我的数据,出色的性能。现在,如果你只能帮我提供一些关于如何将这些内容整合到我的VB.NET代码中的想法,那将是完美的。我会编辑我的答案以包含我的想法。谢谢:) – Chiramisu 2012-01-27 21:13:12