在不更改边框颜色的情况下更改 GridView 单元格中的文本颜色

Posted

技术标签:

【中文标题】在不更改边框颜色的情况下更改 GridView 单元格中的文本颜色【英文标题】:Change Color Of Text in GridView Cell Without Changing Border Color 【发布时间】:2014-06-16 16:05:47 【问题描述】:

我正在网格视图中显示数据,并希望有条件地更改单元格中文本的颜色。

等上RowDataBound的网格

if (e.Row.RowType == DataControlRowType.DataRow)

     if (((SurveyListHeader)(e.Row.DataItem)).PositionalConfidence != "G1" && ((SurveyListHeader)(e.Row.DataItem)).PositionalConfidence != "G3")
     
          e.Row.Cells[3].ForeColor = System.Drawing.Color.Red;
        //e.Row.Cells[3].BorderColor = System.Drawing.Color.Black;
     

     if (((SurveyListHeader)(e.Row.DataItem)).PositionalConfidence != "G2" && ((SurveyListHeader)(e.Row.DataItem)).PositionalConfidence != "G3")
     
          e.Row.Cells[4].ForeColor = System.Drawing.Color.Red;
        //e.Row.Cells[4].BorderColor = System.Drawing.Color.Black;
     

不过,这也会导致边框颜色发生变化。

我尝试将边框颜色改回黑色,但这不起作用。 我已经尝试在单元格的 CSSStyleCollection 中添加一个样式项,仍然没有任何乐趣。

我看到其他人遇到过问题,但没有适合我的答案。有什么建议吗?

【问题讨论】:

这是因为你正在改变Cell的颜色。建议使用标签控件作为模板列并更改控件的颜色。 @HassanNisar 如果是这种情况,ForeColor 和 BorderColor 的用途是什么?为什么要把它们分开? 这个我需要弄清楚。 你能告诉我们markupgridview吗? 【参考方案1】:

对于偶然发现此问题的任何其他人,您可以通过更改前景色然后将所有边框改回黑色来使其工作 - 可能并不理想,但更改所有单独的标签将是一场噩梦。下面的代码(请注意,您必须更改每个单元格而不仅仅是行边框)其中 grdSearchResults 是您的网格视图:

 protected void grdSearchResults_RowDataBound(object sender, GridViewRowEventArgs e)
        
            if (e.Row.RowType == DataControlRowType.DataRow)
                
                if (e.Row.Cells[1].Text == "Closed")
                
                    e.Row.ForeColor = System.Drawing.Color.LightGray;

                    for (int i = 0; i < grdSearchResults.Columns.Count; i++)
                    
                        e.Row.Cells[i].BorderColor = System.Drawing.Color.Black;
                                     
                    
            
        

【讨论】:

【参考方案2】:

我在更改为红色之前使用将边框颜色填充为黑色,然后我使用 else 块为未更改为红色的单元格填充黑色...效果很好。在这里,我们可以使用任何单元格编号。例如,我使用了“3”。

if (e.Row.RowType == DataControlRowType.DataRow)
 

                if (e.Row.Cells[3].Text.StartsWith("-"))
                

                    // change the color
                    e.Row.Cells[3].BorderColor = System.Drawing.Color.Black;
                    e.Row.Cells[3].ForeColor = System.Drawing.Color.Red;
                
                else
                
                    e.Row.Cells[3].BorderColor = System.Drawing.Color.Black;
                

【讨论】:

【参考方案3】:

我在 css 中设置了边框颜色,它不会像您的代码一样在除 firefox 之外的几乎所有浏览器中更改边框。

.Gridview td

    border-right: lightsteelblue 1px solid;
    border-top: lightsteelblue 1px solid;
    border-left: lightsteelblue 1px solid;
    border-bottom: lightsteelblue 1px solid;

【讨论】:

以上是关于在不更改边框颜色的情况下更改 GridView 单元格中的文本颜色的主要内容,如果未能解决你的问题,请参考以下文章

在不更改应用样式的情况下更改 QSpinBox 箭头大小

如何在不更改边框的情况下进行css更改以显示所有表格内容?

如何在不使用android中的图像的情况下增加复选框边框

如何在不更改整个文本视图颜色的情况下更改文本颜色

在不更改现有图纸颜色的情况下更改新图纸的颜色

PyQt 在不重置样式的情况下更改 QPushButton 背景颜色