У меня есть System.Data.DataTable, который я привязываю к GridView. Если у пользователя нет определенной роли безопасности, я хочу заменить данные в определенных столбцах на «X». Могу ли я сделать это, не перебирая все строки?Измените значение каждой ячейки в столбце DataTable
ответ
Вы также можете сделать это на заднем конце. Передайте идентификатор пользователя или роль в sp, который возвращает только видимые столбцы и значения «X» для столбцов, которые они не могут видеть, и привязать к нему интерфейс.
Внесите событие RowDataBound в GridView и внесите изменения там, если роль безопасности пользователя неадекватна.
void CusomGridView_RowDataBound(Object sender, GridViewRowEventArgs e)
{
if(User.Role != "Admin")
{
e.Row.Cells[1].Text = "X";
}
}
Строго говоря, нет. Вы можете использовать методы расширения стиля Linq, чтобы скрыть реализацию, но любой код на процедурном языке будет включать итеративный цикл через строки. Даже событие RowDataBound запускается итеративно каждой строкой; тем не менее, он все равно выполняет итерацию по строкам, так что, по крайней мере, вы не дублируете поведение цикла.
Вы можете просто иметь второй доступный и готовый к использованию столбец имя «ваш столбец2» , заполненный данными x, тогда вы определяете, какой столбец виден на уровне доступа администратора.
В VB.NET вы не можете изменять значения каждой строки без рекурсии.
Пошел с этим решением, так как он не требует дополнительного цикла через строки или проверки нескольких ролей. Процесс проверки роли немного связан. – RememberME