根据条件获取GridView的特定记录

时间:2018-06-12 08:51:38

标签: c# asp.net gridview

我试图从网格视图中获取最后两个值,不包括零价格的项目。

网格视图数据

ITEMCODE    ITEMNAME       PRICE
001         Ice Tea         5.0000
002         Super Delux     12.0000
003         Meditern Veg    0.0000
004         Super  L        0.0000
005         Super  L        33.0000

在这种情况下,所需的输出是

Value1:005
Value2:002

代码

protected void Button1_Click(object sender, EventArgs e)
{
    int count = 0;
    foreach (GridViewRow row in this.GridView1.Rows)
    {
        if ((row.Cells[2].Text != "0"))
        {
            count = (count + 1);
        }

    }

    Int32 Value1 = (count - 1);
    Int32 Value2 = (count - 2);
    lblValue1.Text = GridView1.Rows[Value1].Cells[0].Text;
    lblValue2.Text = GridView1.Rows[Value2].Cells[0].Text;
}

我厌倦的代码没有返回所需的输出。

1 个答案:

答案 0 :(得分:0)

这应该有效:

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行或者到达开头时停止。找到的行放在列表中以保存它们。

我在最后使用了额外的ifs,因为当找不到2行时(不在你的例子中),不会使索引超出范围异常。随意编辑。

希望它有所帮助!

相关问题