Как уже упоминалось, в вашем случае вы запускаете NotifyPropertyChanged (), когда изменяется сам массив, а не какой-либо элемент массива.
Если вы хотите, чтобы элементы могли запускать событие, вам нужно реализовать класс, подобный:
public class NotifyingData<T> : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
private T _Data;
public T Data
{
get { return _Data; }
set { _Data = value; NotifyPropertyChanged(); }
}
}
, а затем заполнить ваш массив этим классом:
_OffsetAngles[0] = new NotifyingData<double> { Data = 10 };
[115 ] У меня нет доступа к VS прямо сейчас, поэтому могут быть некоторые ошибки, но это должно быть правильным понятием для вас.
Вы могли сделать что-то вроде этого:
select userid, username
, max(case when permissionid=10 then rights end) as permission10_rights
, max(case when permissionid=11 then rights end) as permission11_rights
, max(case when permissionid=12 then rights end) as permission12_rights
from userpermissions
group by userid, username;
Необходимо явно добавить подобное макс. (...) столбец для каждого permissionid.
Если бы Вы, где использование MySQL я предложил бы Вас, используете group_concat () как ниже.
select UserId, UserName,
group_concat(PermissionId) as PermIdList,
group_concat(Rights SEPARATOR ',') as RightsList
from Table_user join Table_UserPermissions on
Table_User.UserId = Table_UserPermissions.UserId=
GROUP BY Table_User.UserId
Это возвратилось бы
UserId UserName PermIdList RightsList
1 John 10,11,12 1,2,3
Быстрый поиск Google 'mssql group_concat' показал пару различных хранимых процедур (I), (II) для MSSQL, который может достигнуть того же поведения.
Короткий ответ:
Нет.
Вы не можете динамично включить столбцы к своему запросу.
Помните, SQL является основанным на наборе языком. Вы запрашиваете наборы и наборы соединения вместе.
То, что Вы откапываете, является рекурсивным списком и требуя что список быть представленным в виде строки вместе горизонтально скорее затем вертикально.
Вид, можно фальсифицировать его с рядом сам соединения, но чтобы сделать это, необходимо знать все возможные полномочия перед записью запроса..., который является тем, что предложили другие предложения.
Можно также задержать recordset на другой язык и затем выполнить итерации через это для генерации надлежащих столбцов.
Что-то как:
SELECT Table_User.userID, userName, permissionid, rights
FROM Table_User
LEFT JOIN Table_UserPermissions ON Table_User.userID =Table_UserPermissions.userID
ORDER BY userName
И затем отобразите все полномочия для каждого пользователя, использующего что-то как (Python):
userID = recordset[0][0]
userName = recordset[0][1]
for row in recordset:
if userID != row[0]:
printUserPermissions(username, user_permissions)
user_permissions = []
username = row[1]
userID = row[0]
user_permissions.append((row[2], row[3]))
printUserPermissions(username, user_permissions)
Если это приемлемо, стратегия, которую я использовал, и для разработки и для реализации, состоит в том, чтобы вывести запрос, не вертевшийся или в Excel или в Доступ. У обоих есть намного более дружественный UIs для вертящихся данных, и намного больше людей удобно в той среде.
После того как у Вас есть дизайн, который Вы любите, затем легче думать о том, как копировать его в TSQL.
Кажется, что функция центра была разработана для ситуаций, где можно использовать агрегатную функцию на одном из полей. Как то, если я хотел знать, сколько дохода каждый продавец сделал для компании x. Я мог подвести итог ценового поля из таблицы sales. Я затем получил бы продавца и сколько дохода в продажах они имеют. Для полномочий, хотя не имеет смысла суммировать/считать/и т.д. permissionId поле или поле Rights.
Вы могли создать временный table_flatuserpermissions:
UserID PermissionID1 Rights1 PermissionID2 Rights2 ...etc to as many permission/right combinations as you need
Вставьте записи на эту таблицу от Table_user со всем разрешением и полевым пустым указателем прав.
Записи обновления на этой таблице от table_userpermissions - сначала рекордная вставка и набор PermissionID1 и Rights1, Вторая запись для пользователя обновляет PermissionsID2 и Rights2 и т.д.
Затем Вы запрашиваете эту таблицу для генерации отчета.
Лично, я просто придерживался бы UserId, UserName, PermissionID, столбцов Rights, которые Вы имеете теперь.
Возможно, замена в некотором тексте для PermissionID и Прав вместо числовых значений.
Возможно, отсортируйте таблицу по PermissionID, Пользователю вместо Пользователя, PermissionID, таким образом, аудитор мог проверить пользователей на каждом типе полномочий.
Можно хотеть посмотреть на следующий пример при создании перекрестных запросов в SQL:
Похоже, что существуют новые операции, которые были включены как часть SQL Server 2005 под названием ЦЕНТР и UNPIVOT