简体   繁体   English

如果值为空,则更改gridview背景颜色

[英]change gridview background color if the value is empty

i have this problem to change gridview color if the value in gridview is empty. 如果gridview中的值为空,我有这个问题来更改gridview颜色。 i generate gridview using templatefield. 我使用templatefield生成gridview。 i used this code and it change all in gridview except for the header : 我使用了这段代码,除了标题之外,它在gridview中全部更改:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        //change it according your cell number or find element
        if (e.Row.Cells[0].Text != "")
            e.Row.BackColor = System.Drawing.Color.White;
        else
            e.Row.BackColor = System.Drawing.Color.Red;
    }


}

and this is my back code which i assign gridview : 这是我的后台代码,我指定gridview:

 <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" OnRowDataBound="GridView1_RowDataBound" >
   <Columns>
     <asp:TemplateField HeaderText="Request Date">
       <ItemTemplate><%#Eval("request_date")%></ItemTemplate>
         </asp:TemplateField>

     <asp:TemplateField HeaderText="A01">
         <ItemTemplate>
           <%#Eval("prod_line").ToString() == "A01" ? "Job Order:" 
           +Eval("jo_no") +"\n\n\n\n\nQuantity: "
           +Eval("qty")+"\n\n\n\n\nNeed by Date:" 
           +Eval("need_by_date")+"\n\n\n\n\nStatus: "
           +Eval("process_id") : ""  %>
         </ItemTemplate>
    </asp:TemplateField>

    <asp:TemplateField HeaderText="A02">
      <ItemTemplate>
         <%#Eval("prod_line").ToString() == "A02" ?"Job Order: " 
           +Eval("jo_no") +"\n\n\n\n\nQuantity: "
           +Eval("qty")+"\n\n\n\nNeed by Date: "     
           +Eval("need_by_date")+"\n\n\n\n\nStatus: "+Eval("process_id") : ""   %>
     </ItemTemplate>
   </asp:TemplateField>

   <asp:TemplateField HeaderText="A03">
     <ItemTemplate>
       <%#Eval("prod_line").ToString() == "A03" ? "Job Order: " 
         +Eval("jo_no") +"\n\n\n\n\nQuantity: "
         +Eval("qty")+"\n\n\n\nNeed by Date: " 
         +Eval("need_by_date")+"\n\n\n\n\nStatus: "+Eval("process_id") : ""   %>
     </ItemTemplate>
   </asp:TemplateField>

   <asp:TemplateField HeaderText="A04">
     <ItemTemplate>
       <%#Eval("prod_line").ToString() == "A04" ? "Job Order: " 
         +Eval("jo_no") +"\n\n\n\n\nQuantity: "
         +Eval("qty")+"\n\n\n\nNeed by Date: " 
         +Eval("need_by_date")+"\n\n\n\n\nStatus: "+Eval("process_id") : ""   %>
     </ItemTemplate>
   </asp:TemplateField>

   <asp:TemplateField HeaderText="A05">
     <ItemTemplate>
       <%#Eval("prod_line").ToString() == "A05" ? "Job Order: " 
         +Eval("jo_no") +"\n\n\n\n\nQuantity: "
         +Eval("qty")+"\n\n\n\nNeed by Date: " 
         +Eval("need_by_date")+"\n\n\n\n\nStatus: "+Eval("process_id") : ""   %>
     </ItemTemplate>
   </asp:TemplateField>

   <asp:TemplateField HeaderText="A06">
     <ItemTemplate>
       <%#Eval("prod_line").ToString() == "A06" ? "Job Order: " 
         +Eval("jo_no") +"\n\n\n\n\nQuantity: "
         +Eval("qty")+"\n\n\n\nNeed by Date: " 
         +Eval("need_by_date")+"\n\n\n\n\nStatus: "+Eval("process_id") : ""   %>
      </ItemTemplate>
   </asp:TemplateField>

   <asp:TemplateField HeaderText="A07">
     <ItemTemplate>
       <%#Eval("prod_line").ToString() == "A07" ? "Job Order: " 
         +Eval("jo_no") +"\n\n\n\n\nQuantity: "
         +Eval("qty")+"\n\n\n\nNeed by Date: "      
         +Eval("need_by_date")+"\n\n\n\n\nStatus: "+Eval("process_id") : ""  %>
     </ItemTemplate>
   </asp:TemplateField>

   <asp:TemplateField HeaderText="A08">
     <ItemTemplate>
       <%#Eval("prod_line").ToString() == "A08" ? "Job Order: " 
         +Eval("jo_no") +"\n\n\n\n\nQuantity: "
         +Eval("qty")+"\n\n\n\nNeed by Date: " 
         +Eval("need_by_date")+"\n\n\n\n\nStatus: "+Eval("process_id") : ""   %>
     </ItemTemplate>
   </asp:TemplateField>

   <asp:TemplateField HeaderText="A09">
     <ItemTemplate>
        <%#Eval("prod_line").ToString() == "A09" ? "Job Order: " 
          +Eval("jo_no") +"\n\n\n\n\nQuantity: "
          +Eval("qty")+"\n\n\n\nNeed by Date: " 
          +Eval("need_by_date")+"\n\n\n\n\nStatus: "+Eval("process_id") : ""   %>
     </ItemTemplate>
   </asp:TemplateField>

   <asp:TemplateField HeaderText="A10">
     <ItemTemplate>
       <%#Eval("prod_line").ToString() == "A10" ?"Job Order: "
          +Eval("jo_no") +"\n\n\n\n\nQuantity: "
          +Eval("qty")+"\n\n\n\nNeed by Date: " 
          +Eval("need_by_date")+"\n\n\n\n\nStatus: "
          +Eval("process_id") : ""   %>
     </ItemTemplate>
   </asp:TemplateField>

   <asp:TemplateField HeaderText="A11">
     <ItemTemplate>
       <%#Eval("prod_line").ToString() == "A11" ? "Job Order: " 
         +Eval("jo_no") +"\n\n\n\n\nQuantity: "
         +Eval("qty")+"\n\n\n\nNeed by Date: " 
         +Eval("need_by_date")+"\n\n\n\n\nStatus: "
         +Eval("process_id") : ""   %>
     </ItemTemplate>
   </asp:TemplateField>

   <asp:TemplateField HeaderText="A12">
     <ItemTemplate>
       <%#Eval("prod_line").ToString() == "A12" ? "Job Order: " 
         +Eval("jo_no") +"\n\n\n\n\nQuantity: "
         +Eval("qty")+"\n\n\n\nNeed by Date: " 
         +Eval("need_by_date")+"\n\n\n\n\nStatus: "
         +Eval("process_id") : ""   %>
     </ItemTemplate>
   </asp:TemplateField>

   <asp:TemplateField HeaderText="A13">
     <ItemTemplate>
       <%#Eval("prod_line").ToString() == "A13" ?"Job Order: "
         +Eval("jo_no") +"\n\n\n\n\nQuantity: "
         +Eval("qty")+"\n\n\n\nNeed by Date: " 
         +Eval("need_by_date")+"\n\n\n\n\nStatus: "
         +Eval("process_id") : ""   %>
     </ItemTemplate>
   </asp:TemplateField>

   <asp:TemplateField HeaderText="A14">
     <ItemTemplate>
       <%#Eval("prod_line").ToString() == "A14" ? "Job Order: " 
         +Eval("jo_no") +"\n\n\n\n\nQuantity: "
         +Eval("qty")+"\n\n\n\nNeed by Date: " 
         +Eval("need_by_date")+"\n\n\n\n\nStatus: "
         +Eval("process_id") : ""  %>
     </ItemTemplate>
   </asp:TemplateField>

   <asp:TemplateField HeaderText="A15">
     <ItemTemplate>
       <%#Eval("prod_line").ToString() == "A15" ?"Job Order: "
         +Eval("jo_no") +"\n\n\n\n\nQuantity: "
         +Eval("qty")+"\n\n\n\nNeed by Date: " 
         +Eval("need_by_date")+"\n\n\n\n\nStatus: "
         +Eval("process_id") : ""   %>
     </ItemTemplate>
   </asp:TemplateField>

   <asp:TemplateField HeaderText="A16">
     <ItemTemplate>
       <%#Eval("prod_line").ToString() == "A16" ? "Job Order: " 
         +Eval("jo_no") +"\n\n\n\n\nQuantity: "
         +Eval("qty")+"\n\n\n\nNeed by Date: " 
         +Eval("need_by_date")+"\n\n\n\n\nStatus: "
         +Eval("process_id") : ""   %>
     </ItemTemplate>
   </asp:TemplateField>

   <asp:TemplateField HeaderText="A17">
     <ItemTemplate>
       <%#Eval("prod_line").ToString() == "A17" ?"Job Order: "
         +Eval("jo_no") +"\n\n\n\n\nQuantity: "
         +Eval("qty")+"\n\n\n\nNeed by Date: " 
         +Eval("need_by_date")+"\n\n\n\n\nStatus: "
         +Eval("process_id") : ""   %>
     </ItemTemplate>
   </asp:TemplateField>

   <asp:TemplateField HeaderText="A18">
     <ItemTemplate>
      <%#Eval("prod_line").ToString() == "A18" ? "Job Order: "
        +Eval("jo_no") +"\n\n\n\n\nQuantity: "
        +Eval("qty")+"\n\n\n\nNeed by Date: " 
        +Eval("need_by_date")+"\n\n\n\n\nStatus: "+Eval("process_id") : ""   %>
     </ItemTemplate>
   </asp:TemplateField>
  </Columns>
</asp:GridView>

and i got the output like this : 我得到了这样的输出:

图像我使用上面的代码

but i want the output be like this : 但我希望输出如下:

我想要出现的图像

Look at this section of your code , you will find the problem 看看代码的这一部分,你会发现问题所在

 if (e.Row.Cells[0].Text != "")
        e.Row.BackColor = System.Drawing.Color.White;
    else
        e.Row.BackColor = System.Drawing.Color.Red;

You are setting background color of whole row [e.Row.BackColor] if cell is empty 如果单元格为空,则设置整行的背景颜色[e.Row.BackColor]
Set the color of cell in row 在行中设置单元格的颜色
Like this 像这样

e.Row.Cells[0].BackColor = System.Drawing.Color.Red;

You can apply your logic with it (whichever cell you wanna color) 你可以用它来应用你的逻辑(无论你想要哪个单元格)

As far as I understand the issue, your cell has no value but if you see it within your RowDataBound event handler by putting the breakpoint, you would probably see value like this &nbsp; 据我所知,你的单元格没有任何价值,但是如果你通过放置断点在RowDataBound事件处理程序中看到它,你可能会看到这样的值&nbsp; instead of empty string. 而不是空字符串。

You just need to slightly modify your condition within RowDataBound like this: 您只需稍微修改RowDataBound的条件,如下所示:

if (string.IsNullOrEmpty(Server.HtmlDecode(e.Row.Cells[1].Text).Trim()))
      e.Row.BackColor = System.Drawing.Color.Red;

The value within your cell is htmlEncoded . 单元格中的值是htmlEncoded You need to decode it using Server.HtmlDecode , after this your value will be " " string with a space that's why I used Trim() and finally checked whether that value is null or empty 您需要使用Server.HtmlDecode对其进行解码,之后您的值将为" "字符串,其中包含一个空格,这就是我使用Trim()的原因,最后检查该值是null or empty

This is tested solution and It will work. 这是经过测试的解决方案,它将起作用。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM