【问题标题】:Populating a list with all associated values for a common index?使用公共索引的所有关联值填充列表?
【发布时间】:2016-02-12 06:56:01
【问题描述】:

我有一个 List(Of Tuple(Of Object, Double),当我按任务运行已购零件的 DataGridView 时填充该列表。每个任务由一个四位数字表示。大多数任务在DataGridView 因为它们需要多个部分才能完成(但不是全部)。对于此列表中的每个元组,Item1 是任务编号,Item2 是完成它所需的每个部分的成本总和。这是代码我现在有填充列表。

Private Sub populateDoubleList()
    purchasedSum = New List(Of Tuple(Of Object, Double))
    For i = 1 To DataGridView.Rows.Count - 1
        Dim allbyTask As Double = DataGridView.Item("TOTALCOST", i - 1).Value
        While DataGridView.Item("TASK", i).Value = DataGridView.Item("TASK", i - 1).Value
            allbyTask = allbyTask + DataGridView.Item("TOTALCOST", i).Value
            i = i + 1
        End While
        purchasedSum.Add(Tuple.Create(DataGridView.Item("TASK", i - 1).Value, allbyTask))
    Next
End Sub

大约有 70 个任务。此方法仅使用 39 个项目填充列表。我知道代码是错误的,但我想不出如何改进它或如何判断一个任务是否只有一个部分。

【问题讨论】:

    标签: vb.net datagridview tuples


    【解决方案1】:

    而不是从DataGridView 重新读取数据,您应该只使用DataSource 或数据最初来自的任何地方。由于我们不知道那是什么,我将展示一些读取DataGridView 的代码。

    正如您所说,任务由一个四位数字表示,我使用Integer 而不是Object 来存储它。我还使用Dictionary(Of Integer, String) 来存储每个任务的总成本.这样可以很容易地找到每项任务的当前总数。

    Private purchasedSum As Dictionary(Of Integer, Double)
    
    Private Sub populateDoubleList()
        purchasedSum = New Dictionary(Of Integer, Double)
        For i As Integer = 0 To DataGridView1.Rows.Count - 1
            Dim taskNum As Integer = CInt(DataGridView1.Item("TASK", i).Value)
            Dim cost As Double = CDbl(DataGridView1.Item("TOTALCOST", i - 1).Value)
            If purchasedSum.ContainsKey(taskNum) Then
                purchasedSum(taskNum) += cost
            Else
                purchasedSum.Add(taskNum, cost)
            End If
        Next
    End Sub
    

    【讨论】:

    • DataSource 是一个由 SQL 查询填充的 DataTable。它被称为 dtPurchased。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-15
    • 1970-01-01
    相关资源
    最近更新 更多