Как установить enable =false для шаблона элемента внутри сетки в asp.net

#c# #asp.net #datagrid

#c# #asp.net #datagrid

Вопрос:

Я хочу установить enable = false в соответствии с ролью

У меня есть if инструкция для проверки роли

 page load() {
    if(role == "something")
    {
        // I want to set imgbtn.enabled = false;
    }
}
  

Как это сделать.

 <Columns><asp:TemplateField HeaderText="Edit Controls" ItemStyle-Width="15%">
       <ItemTemplate>
       <asp:ImageButton ID="imgbtn" ImageUrl="Styles/Images/Edit.jpg" runat="server" OnClick="imgbtn_GroupEditClick" ToolTip="Edit Group" />
       <asp:ImageButton ID="img_Send" ImageUrl="Styles/Images/Message.jpg" Enabled="True"
   runat="server" PostBackUrl='<%# Eval("GroupName", "SendMessage.aspx?GroupName={0}") %>'
                                ToolTip="Create Message"></asp:ImageButton>


</ItemTemplate>
     </asp:TemplateField>
      <asp:BoundField DataField="GroupID" ItemStyle-Width="0%" HeaderText="GroupID" />
      <asp:BoundField DataField="GroupName" ItemStyle-Width="20%" HeaderText="GroupName" />
     </columns>
  

Я делаю привязку данных для сетки

Комментарии:

1. Я также использовал теги gator, чтобы сообщить javascript (или jquery) о запуске… Таким образом, вместо обхода datagridview в поисках типов в шаблоне элемента, это просто $(‘#imgbtn’).attr(‘enabled’,’false’);

Ответ №1:

Вы можете обрабатывать RowDataBound событие сетки

 protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
 {
       //Or you can use e.Row.Cells[0].FindControl("ur control id");
       foreach (object  c in e.Row.Cells[0].Controls)
       {
           ImageButton btn = c as ImageButton;
           if (c != null amp;amp; role == "something")
           {
               //Do your logic here
           }
       }
  }
  

Ответ №2:

Обработайте событие RowDataBound в GridView следующим образом:

 protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    var btn = e.Row.FindControl("imgbtn") as Button;
    btn.Enabled = role == "something";
}
  

Ответ №3:

Может быть, вы можете использовать выражение привязки данных и сделать это в разметке ASPX:

 <asp:ImageButton ID="imgbtn" Enabled='<%# role == "something" %>' ... />
  

Ответ №4:

Если у вас есть один или несколько элементов управления на странице, которые вы хотите включить или отключить в зависимости от роли, вы можете создать общедоступное свойство на своей странице / элементе управления следующим образом:

 public bool BelongsToRoleA { get; set; }
  

Установите его значение на основе роли

 If(role==”something”)
{
    BelongsToRoleA = true;
}else
{
    BelongsToRoleA = false;
}
  

А затем ссылаться на него в своей разметке следующим образом:

 <asp:ImageButton ID="imgbtn" Enabled='<%# BelongsToRoleA %>' ...
  

Ответ №5:

Вы также можете сделать так:-

установите на вашей странице .aspx.cs

 public string role { set; get; }
  

и в части дизайна замените свой код на это

 <Columns>
            <asp:TemplateField HeaderText="Edit Controls" ItemStyle-Width="15%">
                <ItemTemplate>
                <%if (role == "Something")
                  { %>
                    <asp:ImageButton ID="imgbtn" ImageUrl="Styles/Images/Edit.jpg" runat="server" OnClick="imgbtn_GroupEditClick"
                        ToolTip="Edit Group" Enabled="false" />
                        <%}
                  else
                  { %>
                          <asp:ImageButton ID="ImageButton1" ImageUrl="Styles/Images/Edit.jpg" runat="server" OnClick="imgbtn_GroupEditClick"
                        ToolTip="Edit Group" Enabled="true" />
                        <%} %>
                    <asp:ImageButton ID="img_Send" ImageUrl="Styles/Images/Message.jpg" Enabled="True"
                        runat="server" PostBackUrl='<%# Eval("GroupName", "SendMessage.aspx?GroupName={0}") %>'
                        ToolTip="Create Message"></asp:ImageButton>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:BoundField DataField="GroupID" ItemStyle-Width="0%" HeaderText="GroupID" />
            <asp:BoundField DataField="GroupName" ItemStyle-Width="20%" HeaderText="GroupName" />
        </Columns>