Мне нужны идеи ...
У меня есть классический сценарий с поворотом, содержащий следующие таблицы: Users, Roles, UsersInRoles.
На моей веб-странице у меня есть несколько комбинированных списков (т.е.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
Используя рекомендацию Тима, я могу использовать некоторый код, подобный этому, для привязки к каждомусоответствующий выпадающий список.Единственное, что меня беспокоит, это то, что я выполняю запрос для каждой роли, который создает потенциальную нагрузку на сервер каждый раз, когда пользователь получает доступ к странице.
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 для стилизации каждого элемента списка в зависимости от того, является ли он членом данной роли или нет.>. <</p>
Спасибо:)