【问题标题】:How to get the row index so I can color cells如何获取行索引以便为单元格着色
【发布时间】:2012-01-01 02:10:31
【问题描述】:

我有一个包含一些序列号的网格视图。每列需要有唯一的数字序列。它是可编辑的,如果用户输入的数字已经在此特定列中,则单元格将显示为红色。

到目前为止,我只为 2 个错误单元格中的第二个单元格着色(具有相同的值)。如何为两个单元格着色。据我所知,我也需要使用行索引,但我不知道如何..

这里是代码

            //colum2
            string sValue2 = e.Row.Cells[4].Text;

            if (Values2.Contains(sValue2))
            {
                // This value is a duplicate - color red
                e.Row.Cells[4].BackColor = System.Drawing.Color.Red;
                 //Response.Write("Warning... Error in pad no: " +e.Row.Cells[2].Text+ " dupliated value: " +e.Row.Cells[3].Text);


            }
            else
            {
                Values2.Add(sValue2);
            }

所有 8 列都相同

希望这是可以理解的。 提前非常感谢

【问题讨论】:

  • 这段代码是从事件处理程序中获取的吗? e 变量是什么?
  • 你试过了吗?:e.Row.BackColor = System.Drawing.Color.Red;
  • protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 这是方法签名及其参数;)
  • @YuriyRozhovetskiy 这就是我正在做的不是吗?

标签: c# asp.net gridview colors indexing


【解决方案1】:

您的问题不是很清楚,但我会尽力帮助并根据我的理解做出回应。

获取行索引有不同的方法。

这取决于 GridView 控件的哪个事件,您的代码逻辑需要执行:

  • _RowDataBound:e.Row.RowIndex
  • _RowCommand:((Control)e.CommandSource).NamingContainer as GridViewRow.RowIndex
  • _RowEditing:e.NewEditIndex
  • _RowUpdating、_RowDeleting 和 _RowCancelingEdit:e.RowIndex

希望这会有所帮助。

示例代码:

private bool IsCellToHighlight(GridViewCell cell)
{
bool highlightCell = false;
// Put your cell checking condition
// Example ..
highlightCell = (string.Compare(cell.Text, "Check Value", true) == 0);
return highlightCell;
}

private void HighlightCells(GridViewRow row)
{
for(int c=0; r<row.Cells.Count; c++)
{
if(this.IsCellToHighlight(row.Cells[c]))
{
// Apply required styling Code
// ..
}
}
}

另一种方法是使用 JQuery:

  1. 首先按原样加载网格
  2. 然后在客户端使用 JQuery 执行同样的操作

查看这些链接:

http://www.dotnetcurry.com/ShowArticle.aspx?ID=259

http://www.dotnetfunda.com/articles/article970-aspnet-gridview-jquery-tips-and-tricks-part-1.aspx

http://www.dotnetcurry.com/ShowArticle.aspx?ID=250


免责声明:这只是一种做法。虽然有点粗糙,但您可以在它之上进行构建。

【讨论】:

  • 是的,它是 RowDataBound 方法。对不起,我忘了提到这段代码在那里。所以 gridview 正在使用这种方法,我知道有这个 e.Row.RowIndex 但你知道我如何使用它来为两个单元格着色正如你所看到的到目前为止,我对每一列都进行了硬编码:e.Row .Cells[4].BackColor = System.Drawing.Color.Red;我不知道这是如何工作的,但它用错误的值着色第二个单元格。你现在能更好地理解它吗:) 非常感谢
  • 也许你可以尝试这样的事情:运行一个循环来读取每个列/单元格,然后检查每次迭代中的值。我在上面的答案中添加了示例代码。
  • 如果我做对了,这将检查整个 gridview 中的每个单元格,对吗?我需要的是检查每一列,并且只在这个特定列中复制要着色的单元格。 P.S javaScript 不是我的强项 :)
  • 然后把它倒过来。我建议不要在 _RowDataBound 事件中这样做。
【解决方案2】:

如果我的问题正确,您想找出在同一单元格中已包含相同数据的行的 RowIndex,并将其颜色更改为红色。

您可以编写一个方法来将包含该数据的每个单元格颜色更改为红色。 比如:

void colorCells(GridView GV, int CellIndex, string Text)
{
    foreach(GridViewRow row in GV.Rows)
    {
        if(row.Cells[CellIndex].Text == Text)
            row.Cells[CellIndex].BackColor = System.Drawing.Color.Red;
        //might use else to set to default color
    }
}

然后你可以这样使用:

    //colum2
    string sValue2 = e.Row.Cells[4].Text;
        if (Values2.Contains(sValue2))
        {
            // This value is a duplicate - color red
            colorCells(/* Get the reference for the grid view, e.g.: gridView1*/, 4, sValue2); 
        }
        else
        {
            Values2.Add(sValue2);
        }

【讨论】:

  • 哇,太棒了。谢谢你。现在我对其进行了测试,结果不是我所期望的,但代码对我来说似乎非常正确我现在得到的是第一个具有错误值的单元格,而不是第二个单元格(但两者都必须着色)。只有当我有第三个值时 - 然后两个单元格被涂成红色,但分别不是第三个。我不明白:(
猜你喜欢
  • 2021-10-30
  • 1970-01-01
  • 2013-06-24
  • 1970-01-01
  • 2023-03-26
  • 2013-03-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多