我试图从网格视图中获取最后两个值,不包括零价格的项目。
网格视图数据
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;
}
我厌倦的代码没有返回所需的输出。
答案 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行时(不在你的例子中),不会使索引超出范围异常。随意编辑。
希望它有所帮助!