2013-11-25 3 views
2

Я работаю над проектом предприятия. Таким образом, многие пользователи от операторов ввода данных получают высшее руководство. Учетные записи пользователей отдельно хранятся в таблице UserData Table и их соответствующих привилегиях в таблице прав доступа .Удаление столбца редактирования gridview из .Master Page

Несколько форм в моей транзакции поддержки gridview, для которой я предоставил Просмотрите, отредактируйте, обновите, как показано ниже.

<asp:GridView ID="grvId".....> 
    <Columns> 
    <asp:BoundField..... /> 
    . 
    . 
     <asp:TemplateField AccessibleHeaderText="Edit" HeaderText="Edit"> 
      <ItemTemplate> 
       <asp:Button ID="btnEdit" runat="server" CausesValidation="false" 
        CommandName="Edit" Text="Edit" /> 
      </ItemTemplate> 
      <EditItemTemplate> 
       <asp:Button ID="btnUpdate" runat="server" CausesValidation="true" 
        CommandName="Update" Text="Update" /> 
       <asp:Button ID="btnCancel" runat="server" CausesValidation="false" 
        CommandName="Cancel" Text="Cancel" /> 
      </EditItemTemplate> 
     </asp:TemplateField> 
     <asp:ButtonField ButtonType="Button" CommandName="Delete" HeaderText="Delete" Text="Delete" /> 
    </Columns> 
</asp:GridView> 

То, что я хочу сделать то, что, основываясь на сессии (пользователь в настоящее время вошли в систему), я должен установить видимость EDIT и УДАЛИТЬ функциональность в GridView.

ОБНОВЛЕНИЕ: Может ли это быть реализовано на странице .Master и возможен вызов со вспомогательных страниц?

+0

Вы хотите показать/скрыть весь столбец или отдельные кнопки? – matk

+0

Весь столбец. Администратор имеет все права. Работники среднего уровня будут обладать правами. Операторы ввода данных могут добавлять данные, но не удалять их. Такие вещи. – Mahe

+0

Вместо использования главной страницы было бы лучше создать класс, который наследует от System.Web.UI.WebControls.GridView и размещает там проверки безопасности. – matk

ответ

3

В C# Code-Behind проверьте текущий пользователь и проверьте наличие привилегий.

После того, как вы определили это, вы можете просто скрыть столбец:

if (!userEdit) { 
    grvId.Columns[0].Visible = false; 
} 

Где 0 это номер столбца редактирования Column (Помните коллекции начинаются с 0) и переменным userEdit является булевым набором о том, может ли пользователь редактировать сетку или нет.

+0

Я попробую @Nunners. Но, вместо того, чтобы помещать его в induvidual форме, это можно сделать на странице .Master? – Mahe

+0

@Mahe Да вы можете разместить это на главной странице, используя следующий код для доступа к GridView с главной страницы (обратите внимание, что идентификатор GridView должен быть тем же самым) 'GridView gv = (GridView) ContentPlaceHolder1.FindControl (" grvId «);'. Вы также должны проверить, не найден ли найденное значение, чтобы избежать ошибок, если GridView не существует. – Nunners

+0

Вы имеете в виду, что сетка вообще не существует. Или сетка все еще не связана со значениями? - @Nunners? Просьба уточнить. Первый случай, да. Существует около 3 отчетов. Объявляется только сетка. Даже столбцы создаются на основе SQL-запроса, выводимого пользователем. – Mahe

0

Не прямо отвечая на вопрос, но в этой ситуации я хотел бы использовать CommandField (http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.commandfield%28v=vs.110%29.aspx) вместо нескольких столбцов Кнопка/Шаблон:

<asp:GridView ID="grvId" ...> 
    <Columns> 
     <asp:BoundField..... /> 
     <asp:CommandField ButtonType="Button" /> 
    </Columns> 
</asp:GridView> 

Затем вы можете динамически отображать кнопки/скрыть так:

protected void Page_Load(object sender, EventArgs e) 
{ 
    bool canEdit = isAdmin || isEditor; 
    bool canDelete = isAdmin; 

    // fetch the last column, which is the command field 
    CommandField col = (CommandField)grvId.Columns[grvId.Columns.Count - 1]; 

    col.ShowEditButton = canEdit; 
    col.ShowDeleteButton = canDelete; 
} 

Где, конечно же, вы должны заменить isAdmin, isEditor и т. Д. С вашей фактической проверкой на доступ.

+0

Изменение его в поле команды не может быть выполнено в моем случае, так как это приводит к тому, что все страницы (в основном) и их соответствующие вызовы будут изменены соответствующим образом. Поскольку это проект ERP, это требует времени, которое вам не нужно, если вы работаете над крайним сроком. – Mahe