我怎样才能增加额外价值?

时间:2017-01-05 11:50:09

标签: vb.net datagridview

我有一张表(DataGridView),如下所示:

Col1 | Col2 | Col3

3    | Mars | Regular

这是我的代码:

For a As Integer = 0 To Form3.DataGridView1.Rows.Count - 1
    For b As Integer = 0 To Form3.DataGridView1.Rows.Count - 1
        For c As Integer = 0 To Form3.DataGridView1.Rows.Count - 1
            If Form3.DataGridView1.Rows(c).Cells(2).Value = "Regular" Then
                If Form3.DataGridView1.Rows(b).Cells(1).Value = Form3.MetroComboBox7.Items(0) Then
                    fair = 7 * Form3.DataGridView1.Rows(a).Cells(0).Value
                    Label1.Text += fair
                End If
            End If
        Next
    Next
Next

我想设置如果Col3上的常规Col2上的火星,那么值 7 ,它将乘以行Col1,每行都相同。

2 个答案:

答案 0 :(得分:0)

我认为你应该使用活动dtgv.CellMouseClick

然后您创建所需的条件。我在这里举个例子:

Public Sub event_select() Handles dtgv.CellMouseClick
        Dim row As Integer = dtgv.CurrentRow.Index()
        ' If the column 2 and 3 are selected
        If dtgv.Rows(row).Cells(1).Selected = True And dtgv.Rows(row).Cells(2).Selected = True Then
            ' If the value of the 2nd column is Mars and the value of the 3rd column is Regular
            If dtgv.Rows(row).Cells(1).Value = "Mars" And dtgv.Rows(row).Cells(2).Value = "Regular" Then
                Label1.Text = 7 * dtgv.Rows(row).Cells(0).Value
            End If
        End If
    End Sub

您还应检查没有其他行选择了单元格。

答案 1 :(得分:0)

所有行的一个循环足以计算所有行的“合理”

Const REGULAR_VALUE As String = "Regular"
Const FAIR_COEFFICENT As Integer = 7
Dim fairSum As Integer = 0

For Each row As DataGridViewRow in DataGridView1.Rows
    If REGULAR_VALUE.Equals(row.Cells(2).Value.ToString()) = False Then Continue For
    If Equals(MetroComboBox7.Items(0), row.Cells(1).Value) = False Then Continue For

    Dim col1Value As Integer = Integer.Parse(row.Cells(1).Value)
    Dim fair As Integer = col1Value  * FAIR_COEFFICENT 
    fairSum += fair
Next

Label1.Text = fairSum.ToString()

在项目中或至少在代码文件(第一行文件)中设置Option Strict On 通过在编译期间提供有关可能的类型转换错误的快速反馈,这将节省您的时间。

以强类型方式创建表示数据的类

Public Class Ticket
    Public Property Passenger As Integer
    Public Property Destination As String
    Public Property Status As String     
End Class

然后,您可以在表单中以简单的方式向DataGridView添加行

Public Class YourForm
    Private _tickets As New BindigList(Of Ticket)()

    Public Sub New()
        InitializeComponent() ' Forms required method

        DataGridView1.DataSource = _tickets 
    End Sub 

    Private Sub Populate(passenger As Integer, destination As String, Status As String)
        Dim newTicket As New Ticket With
        {
            .Passenger = passenger,
            .Destination = destination,
            .Status = Status,
        }
        _ticket.Add(newTicket)
    End Sub  

    'Then you can loop all rows with correct types
    Private Sub Calculate()
        Dim fairSum As Integer = 0

        For Each ticket As Ticket in _tickets
            If REGULAR_VALUE.Equals(ticket.Status) = False Then Continue For
            If ticket.Destination.Equals(MetroComboBox7.Items(0)) = False Then Continue For

            Dim fair As Integer = ticket.Passenger * FAIR_COEFFICENT 
            fairSum += fair
        Next

        Label1.Text = fairSum.ToString()
    End Sub     
End Class