2017-10-09 88 views
0

在一个DataGridView从下一行数据的当前行的值,我有这个问题设置基础上,下一行的值的单元格的值。如何设置基于使用vb.net

例如;

Remarks Reference 
    A   50 
    A   25 
    B   5 
       -25 

CASE 1:

如果下一步Cell.Row的列“参考”的值是一个正数,然后cell.row的在列“备注”的值是“A”。

CASE 2:

如果下一步Cell.Row的列“参考”的值是一个负数然后cell.row的在列“备注”的值是“B”。

我已经尝试过这个代码,但我不能得到的结果,我需要。

Dim Bal As Decimal = 0 
    For Each r As DataGridViewRow In dgvSTSub.Rows 
     Bal = Bal + r.Cells(3).Value - r.Cells(1).Value 
     r.Cells(3).Value = Bal 

     If Bal > 0 Then 
      r.Cells(2).Value = Bal 
     ElseIf Bal < 0 Then 
      r.Cells(2).Value = r.Cells(3).Value 
     End If 
    Next 

请分享一个关于如何去做的代码。所有的

+0

使用'for'循环来代替'foreach'。此外,根据“列名”访问单元格值,而不是索引。根据我对你的问题的理解,你想根据下一行的值操作当前行,对吧? –

+0

我在别处解决了这个问题,似乎被忽略了。请不要忽视这一个。要么使用'For'循环而不是'For Each'循环,在这种情况下,访问和相邻的行只是增加或减少循环计数器的简单问题,或者获取当前行的Index属性并执行与此相同。第一种选择是更好的,因为那样你可以很容易地从第二行开始,或者以第二行结束。 – jmcilhinney

+0

对不起,如果我后来忽略了你的建议,我只是在vb.net中新建的。事实上,我早些时候回答说要分享一些代码,因为我不知道该怎么做。我无法弄清楚逻辑。我很抱歉。谢谢您的帮助。 – Diaval

回答

1

首先我推荐使用For循环,而不是ForEach因为遍历行变得更加方便和容易。

其次,使用ColumnNames代替Index在访问.Cells,为例如:使用.Cells("reference")参考是列名)代替.Cells(1)。我建议这样做,因为如果将来您碰巧重新排列列,那么您的方法和函数不会受到阻碍,除非更改列的名称。
注意:此处的ColumnName不是您在DataGridView UI中看到的标题文本。 (希望你已经知道了)

当你还没有表现出你在哪里设置的话,这应该让你一些想法如何实现它:

For index = 0 To DataGridView1.RowCount - 1 
    Dim nxt = 1 
    If (index + 1 < DataGridView1.RowCount) Then 
     nxt = DataGridView1.Rows(index + 1).Cells("reference").Value 
    End If 
    If (nxt) > 0 Then 
     DataGridView1.Rows(index).Cells("remark").Value = "A" 
    Else 
     DataGridView1.Rows(index).Cells("remark").Value = "B" 
    End If 
Next 

伪输出:

Remark Reference 

A  13 
B  21 
A  -33 
B  41 
A  -54 
+0

噢,是的!这就是我正在谈论的.. !!!!!你是一个角度兄弟......谢谢你......很简单......谢谢你。 – Diaval