Это должно работать:
protected void Button1_Click(object sender, EventArgs e)
{
List<DataGridViewRow> CountRows = new List<DataGridViewRow>();
for (int i = this.GridView1.Rows.Count-1; CountRows.Count < 2 || i >= 0; i--)
{
if ((double)this.GridView1.Rows[i].Cells[2].Value != 0)
{
CountRows.Add(this.GridView1.Rows[i]);
}
}
if(CountRows.Count >= 1)
{
lblValue1.Text = "Value1:" + CountRows[0].Cells[0].Text;
}
if(CountRows.Count == 2)
{
lblValue2.Text = "Value2:" + CountRows[1].Cells[0].Text;
}
}
То, что я сделал, было подсчитано с конца до начала, используя обычный цикл for, который останавливается, когда найдены 2 строки или до достижения начала.Найденные строки помещаются в список для их хранения.
Я использовал дополнительные if в конце, чтобы не получить индекс вне исключительной ситуации, когда найдено менее 2 строк (не в вашем примере).Не стесняйтесь редактировать, как вам угодно.
Надеюсь, это поможет!