循环通过gridview并更改某些列字体颜色

时间:2018-05-24 09:04:06

标签: c# asp.net

所以我有一个gridview,我想让某些列文本变成另一种颜色......即每一列都说实际上我希望这个文本是绿色的......有人可以帮忙吗?我的网格看起来与此类似。

Hour - actual A - target A - actual aa - target aa - actual b - target b.

最后有一种方法可以在一段时间后重置gridview中的数据......即shiftstart 6am-2pm 2pm-10pm 10pm-6am ...所以8小时后数据会刷新为零。

   public void Refreshdata(int selectedProduct, DateTime shiftStart, DateTime shiftEnd)
        {
            BizManager biz = new BizManager();

            GridView1.DataSource = biz.GetPacktstatisticsForShift(
                shiftStart
                , shiftEnd
                , selectedProduct).DefaultView;
            GridView1.DataBind();

 public DataTable CreatePackingStats(DataSet dset)
        {
            using (DataManager dmgr = new DataManager())
            {
                DataTable target = dset.Tables[0];

                DataTable actual = dset.Tables[1];

                DataColumn[] cols = new DataColumn[1];
                cols[0] = actual.Columns["Hour"];
                actual.PrimaryKey = cols;

                DataTable final = new DataTable();



                // Create table columns
                foreach (DataColumn col in target.Columns)
                {
                    final.Columns.Add(new DataColumn(col.ColumnName, col.DataType));
                    if (col.ColumnName.Contains("Target"))
                    {
                        // Add an equivilant actual column
                        string newColumnName = col.ColumnName.Replace("Target", "Actual");
                        final.Columns.Add(newColumnName, col.DataType);
                    }
                }
                //// Add rows to new table
                foreach (DataRow row in target.Rows)
                {
                    string key = row["Hour"].ToString();

                    DataRow newRow = final.Rows.Add();
                    // Store column value
                    foreach (DataColumn col in final.Columns)
                    {


                        if (col.ColumnName.Contains("HOUR") || col.ColumnName.Contains("Target"))
                        {
                            newRow[col.ColumnName] = row[col.ColumnName];
                        }
                        else
                        {
                            // Find actual data
                            DataColumn actColumn = actual.Columns[col.ColumnName] as DataColumn;
                            if (actColumn == null)
                            {
                                newRow[col.ColumnName] = 0;
                            }
                            else
                            {
                                if (string.IsNullOrEmpty(actual.Rows.Find(key)[col.ColumnName].ToString()))
                                {
                                    newRow[col.ColumnName] = 0;
                                }
                                else
                                {
                                    newRow[col.ColumnName] = actual.Rows.Find(key)[col.ColumnName].ToString();
                                }

                            }

                        }

                    }
                }
                return final;

CreatePackingStats填充了我的网格,添加了列FYI。

我想有一种方法可以添加彩色文本,同时代码循环遍历数据并创建额外的列,不知道如何执行此操作。

而且CreatePackingStats位于一个类中,而不是在aspx后面的页面中。

对于我所有的新问题和学习问题感到抱歉,所有的帮助都将有助于发展,我感谢所有帮助。

1 个答案:

答案 0 :(得分:1)

右键点击GridView,然后转到properties标签,然后选择events。在那里,您会看到名为RowDataBound的活动。

在该事件中编写代码以更改forecolor,如:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            //here the Cells is an array where you can pass the index value of the cell where you want to check and if you don't know where the value is then you can do a for loop and then check the value
            if (e.Row.Cells[0].Text == "someValue")
            {
                e.Row.Cells[0].ForeColor = System.Drawing.Color.Red;
            }
        }
    }
  

更新1 ,使用 IndexOf()

比较值

至于您提供的数据,您必须将比较功能从==更改为IndexOf("SomeValue")。为此,您可以尝试IndexOf("actual")。如果它提供value > -1,则更改color。 或者您可以尝试下面的代码,我循环遍历columns中的所有row(如果您知道值将出现在哪一列,您可以尝试避免循环):

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            for (int i = 0; i < e.Row.Cells.Count; i++)
            {
                if (e.Row.Cells[i].Text.ToLower().IndexOf("actual") > -1)
                {
                    e.Row.Cells[i].ForeColor = System.Drawing.Color.Red;
                }
            }

        }
    }
  

更新2 添加示例数据的快照及其输出。

以下是我正在使用的示例数据: enter image description here

以下是在IndexOf()事件中使用RowDataBound循环的已处理输出。 enter image description here

希望这有帮助。