【问题标题】:Highlight gridview row based on datatable values根据数据表值突出显示gridview行
【发布时间】:2015-08-04 23:07:23
【问题描述】:

我需要根据数据表中的值突出显示 gridview 行。 我已经突出显示了值,例如如果任何特定的单元格值满足某些条件,那么我可以使用此代码突出显示。

if(int.Parse(DataBinder.Eval(e.Row.DataItem,"Risk").ToString()) > 100)
    {
        e.Row.BackColor = Color.FromName("#FAF7DA");
    }

现在我的问题是,在我的 rowdatabound 事件中,我想检查数据表中的值,并且我需要突出显示 gridview 中的值。

protected void OnRowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        { 
            DataTable dt = DataRepository.highlightRow();
            string[] strInactive = dt.AsEnumerable().Select(row => row.Field<string>("product_id")).ToArray();
            foreach (GridViewRow row in gvProducts.Rows)
            {
                for (int i = 0; i < gvProducts.Columns.Count; i++)
                {
                    if (gvProducts.Rows[0].Cells[0].Text.Contains("how to pass array values"))
                    {
                        e.Row.BackColor = System.Drawing.Color.Red;
                    }
                }
            }
        }
    }

例如: 此处数据表将仅返回一列值,例如 10、20、20。然后我需要在 gridview 中突出显示这些值的行。

【问题讨论】:

  • 您遇到了什么问题?什么不起作用?
  • @j.f. - 我正在努力检查 gridview 中的数据表值。我突出显示了具有静态值且大于或小于的行。但这对我来说有点棘手。
  • 首先,您的代码会不必要地浪费太多时间。因为 1. DataTable dt = DataRepository.highlightRow(); 在每一行上都被调用。 2. foreach 和 for 循环在每一行上运行。
  • 你能编辑你的问题并说出你的数据表的内容是什么吗?还有你想和什么比较?

标签: c# asp.net gridview datatable


【解决方案1】:

您应该能够检查 e.Row.DataItem 是否有符合您条件的值

你可以在RowDataBound事件中做这样的事情:

if (e.Row.RowType == DataControlRowType.DataRow) {
  DataRowView drv = (DataRowView) e.Row.DataItem;

  if( drv("Risk") == <some condition> ) {
    e.Row.BackColor = Drawing.Color.Black // :)
  }
}

【讨论】:

  • 在某些情况下我需要提供什么?如何在 gridview 中检查数据表值。
  • 数据表是gridview的数据源吗?
  • 不,数据表不是网格视图的数据源。这是一个单独的,我正在与 gridview 源的数据表进行连接。我需要突出显示匹配的行。
【解决方案2】:

也许这就是你要找的东西:

    private const System.Drawing.Color HIGHLIGHT = System.Drawing.Color.Yellow;
    private const System.Drawing.Color NORMAL = System.Drawing.Color.White;

    protected void OnRowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            DataTable dt = DataRepository.highlightRow();
            string[] strInactive = dt.AsEnumerable().Select(row => row.Field<string>("product_id")).ToArray();
            foreach (var value in strInactive)
            {
              e.Row.BackColor = (e.Row.Cells[0].Text == value) ? HIGHLIGHT : NORMAL;
            }
        }
    }

我不知道你的 DataTable 中有什么,所以我不知道你想测试什么。

【讨论】:

  • 好的,感谢您的及时答复。假设我的数据表返回三个值,如 G-01、G-02、G-03。现在我需要在 gridview 第一行检查这个值并突出显示它们。数据表值是动态的,它们会不断变化。
  • 我使用表格结果编辑了代码以包含foreach 循环。这会让你到达你想去的地方吗?
  • 逻辑对我来说看起来很完美,但行没有突出显示。
  • 这涉及到我不确定的 ASP.NET 部分。你有任何可能发生的 CSS 或样式吗?如果是这样,您可能需要使用 JavaScript 来更新您的 HTML。
  • 当我调试它时完美地取值并且我在那个 aspx 上没有任何 css 或样式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-31
  • 2011-12-01
  • 1970-01-01
  • 2021-08-04
  • 1970-01-01
  • 1970-01-01
  • 2023-04-10
相关资源
最近更新 更多