启用或禁用Gridview控件的背景颜色

时间:2013-02-27 07:08:34

标签: c# asp.net gridview page-lifecycle

在我的gridview中,根据用户角色启用或禁用控件。我想将启用控件的背景颜色更改为黄色。我已经尝试在RowCreated中执行此操作,但是当时启用了所有单元格。

protected void begv_OrderDetail_RowCreated(object sender, GridViewRowEventArgs e)
{
     foreach (TableCell cell in e.Row.Cells)
     {
          if (cell.Enabled == true)
          {
          }
          else
          {
             //Never enters this area
          }

     }
}

以下是我的gridview中的示例字段,我在其中启用或禁用控件。

    <asp:TemplateField HeaderText="ReasonCode" SortExpression="ReasonCode">
        <HeaderTemplate>
            <asp:Label ToolTip="ReasonCode" runat="server" Text="RC"></asp:Label>
        </HeaderTemplate>
        <EditItemTemplate>
            <asp:TextBox ID="txt_ReasonCode" onchange="disableNextStatusButtons()" runat="server" Text='<%# Bind("ReasonCode") %>'
                Enabled='<%# (Roles.IsUserInRole("İhracat Uzmanı") && Session["Status"].ToString()=="3") %>'
                Width="40px"></asp:TextBox>
        </EditItemTemplate>
    </asp:TemplateField>

4 个答案:

答案 0 :(得分:1)

您可以执行以下步骤

  1. 检查RowDatabound上的用户角色
  2. 在RowDatabound上更改行的颜色

    protected void RowDataBound(Object sender, GridViewRowEventArgs e)
    {
        if(e.Row.RowType == DataControlRowType.DataRow)
        {
            //check role
             if (condition)
               e.Row.BackColor = Color.Red;
             else
               e.Row.BackColor = Color.Green;  
            //or set you individual control background 
             //get any control
              var chk = (CheckBox)e.Row.FindControl("chkb");
             //set background
              chk.BackColor = Color.Red;//etc
         }
    }
    
  3. 您可以动态地将css设置为文本框CssClass="yourcss"

                     <asp:TextBox ID="txt_ReasonCode" onchange="disableNextStatusButtons()" runat="server" Text='<%# Bind("ReasonCode") %>'
                    Enabled='<%# (Roles.IsUserInRole("İhracat Uzmanı") && Session["Status"].ToString()=="3") %>'
                    CssClass='<%# (Roles.IsUserInRole("İhracat Uzmanı") && Session["Status"].ToString()=="NormalCss").ToString()=="true"?"yellowcss":"othercss"  %>'
                    Width="40px"></asp:TextBox>
    

答案 1 :(得分:1)

您也可以使用数据绑定语法

设置BackColor
<asp:TextBox ID="txt_ReasonCode" 
             onchange="disableNextStatusButtons()" 
             runat="server"
             Text='<%# Bind("ReasonCode") %>'
             Enabled='<%# (Roles.IsUserInRole("İhracat Uzmanı") && Session["Status"].ToString()=="3") %>'
             BackColor='<%# (Roles.IsUserInRole("İhracat Uzmanı") && Session["Status"].ToString()=="3") ? System.Drawing.Color.Red: System.Drawing.Color.Green %>'
             Width="40px">
</asp:TextBox>

有点难看,但会工作得很好。

答案 2 :(得分:0)

  

在Gridview的RowDataBound事件中尝试。

答案 3 :(得分:0)

尝试使用DataBound事件迭代所有单元格并更新bg。