【问题标题】:Gridview get next and previous cells valuesGridview 获取下一个和上一个单元格值
【发布时间】:2020-02-24 07:34:28
【问题描述】:

如何在rowdatabound 事件上获取gridview 行上一个和下一个单元格值。我试过这个

GridViewRow prevRow = GridView1.Rows[e.Row.RowIndex - 1];
Label previousValue = prevRow.FindControl("SLNO") as Label;

但它会抛出这样的错误

索引超出范围。必须是非负数且小于 集合的大小。参数名称:索引

谢谢

【问题讨论】:

  • 这是因为Rows中没有e.Row.RowIndex - 1索引的行,所以你会遇到这个错误。检查e.Row.RowIndex - 1 的值和Rows 的长度。
  • 当我使用 e.Row.RowIndex + 1 时也会抛出错误。
  • 检查你的Rows 看看你有多少行?!并检查传递的e.Row.RowIndex 的值。告诉我。

标签: c# asp.net gridview


【解决方案1】:

你必须确保

GridView1.Rows.Count > 0

然后确保你从第二行开始rowdatabound,否则它总是会抛出错误Out Of Range,因为它去了第一行,它找不到前一个。

【讨论】:

  • 当我检查行数时也会抛出同样的错误。
【解决方案2】:

尝试下面的代码块来解决您的问题。

上一个:

  if (GridView1.Rows.Count > 0)
                {
                    GridViewRow prevRow = GridView1.Rows[e.Row.RowIndex > 0 ?   e.Row.RowIndex - 1 : e.Row.RowIndex];
                    Label previousValue = prevRow.FindControl("SLNO") as Label;
                }

下一步:

if (GridView1.Rows.Count > 0)
                    {
                        GridViewRow prevRow = GridView1.Rows[GridView1.Row.Count - 1 != e.Row.RowIndex ?   e.Row.RowIndex + 1 : e.Row.RowIndex];
                        Label previousValue = prevRow.FindControl("SLNO") as Label;
                    }

【讨论】:

  • 谢谢老兄,它运行良好。为什么我问这个查询意味着,如果我在当前行和上一个行单元格值中具有相同的值,当我将鼠标移到任何一行上时,我必须更改 gridview 行的背景颜色。
  • 很高兴它能帮到你。干杯!
【解决方案3】:
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        Label lblCurrentValue = (e.Row.FindControl("SLNO") as Label);//Here you will get your current row..

        GridViewRow PreviousRow = GridView1.Rows[e.Row.RowIndex - 1];
        if(PreviousRow.RowType == DataControlRowType.DataRow)
        {
            //Here you will get the PreviousRow 
            Label lblPreviousValue = PreviousRow.Cells[2].FindControl("SLNO") as Label;//You need to specify the cell
        }

    }
}

同样的方法你可以得到下一个单元格的值....像这样..

            GridViewRow NextRow = GridView1.Rows[e.Row.RowIndex + 1];
            if(NextRow.RowType == DataControlRowType.DataRow)
            {
              Label lblNextValue = NextRow.Cells[2].FindControl("SLNO") as Label;//You need to specify the cell
            }

【讨论】:

    猜你喜欢
    • 2019-05-02
    • 1970-01-01
    • 1970-01-01
    • 2017-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多