Невозможно применить условие для циклического прохождения через datarow - PullRequest
0 голосов
/ 22 сентября 2011

Я применил зацикливание в datarow, и мне нужно проверить, что если роль пользователя - admin, мне нужно применить некоторое условие.

Теперь у пользователя может быть несколько ролей, например, у пользователя Smith 3 роли: Admin,Разработчик и тестер.Следовательно, для кузнеца это условие сбывается.Для Джейн она имеет 4 роли: разработчик, тестировщик, аналитик и обычный пользователь, поэтому для Джейн условие становится ложным (поскольку она не является администратором)

Теперь я написал код как

// filling up the dataTable.
DataTable dtAssignedRoles = (DataTable (Session[GlobalConstants.SESSION_USER_ASSGN_ROLE_DT]);
if (dtAssignedRoles != null && dtAssignedRoles.Rows.Count > 0)
{
    foreach (DataRow dr in dtAssignedRoles.Rows)
    {
        if (dr["OT_ROLE"].ToString().ToUpper().Equals("ADMIN"))
        {
            // apply condition for admin here!
        }
    }
}

// Condition that would execute for Jane
if (strICol.Equals("N"))
{
    e.Row.Cells[0].Text = string.Empty;
    e.Row.Cells[0].Controls.Clear();
    Image imgIColumnDesc = new Image();
    imgIColumnDesc.ImageUrl = "~/Images/blackcircle.png";
    e.Row.Cells[0].Controls.Add(imgIColumnDesc);
}

Проблема: для Смита условие не выполняется, так как он администратор, а также разработчик и тестировщик.следовательно, применяются 2 условия;один для администратора и другой для не-администратора (dev + tester)

Следовательно, я думаю, мне нужно проверить все строки, и если есть одна роль с администратором, условие должно быть выполнено.Но я не знаю, как это сделать?

Пожалуйста, руководство.Спасибо

Ответы [ 2 ]

1 голос
/ 22 сентября 2011

Вы можете использовать эту вспомогательную функцию, чтобы определить, есть ли у пользователя определенная роль ...

    public bool hasRole(string role, DataTable dtAssignedRoles)
    {
        if (dtAssignedRoles != null && dtAssignedRoles.Rows.Count > 0)
        {
            foreach (DataRow dr in dtAssignedRoles.Rows)
            {
                if (dr["OT_ROLE"].ToString().ToUpper().Equals(role))
                {
                    return true;
                }
            }
        }
        return false;
    }

РЕДАКТИРОВАТЬ: ИЛИ с Linq

    public bool hasRole(string role, DataTable dtAssignedRoles)
    {
     return dtAssignedRoles.AsEnumerable().Any(a => a["OT_ROLE"].ToString().ToUpper().Equals(role.ToUpper()));
    }

Тогда использовать ...

        if(hasRole("ADMIN",dtAssignedRoles))
        {
            //DO stuff
        }
        else if (hasRole("TESTER", dtAssignedRoles))
        {
            //Do Other Stuff
        }
1 голос
/ 22 сентября 2011

Если после применения условия для администратора вы добавите оператор break;, это вырвется из цикла и перейдет к следующему этапу процесса.

...