Arrays 将数据从listview存储到阵列&;生成随机值

Arrays 将数据从listview存储到阵列&;生成随机值,arrays,vb.net,visual-studio-2010,Arrays,Vb.net,Visual Studio 2010,我非常感谢这个网站提供的答案,因为它对我的学习帮助很大。现在的问题是,我似乎无法将listview中的第三列数据转换为数组形式 我有一个这样的数据库,WorkerID代表工人,TaskNo代表任务,耗时将代表特定工人完成特定任务所需的时间 +----------+--------+-----------+ | WorkerID | TaskNo | TimeTaken | +----------+--------+-----------+ | 1 | 1 | 7.5

我非常感谢这个网站提供的答案,因为它对我的学习帮助很大。现在的问题是,我似乎无法将listview中的第三列数据转换为数组形式

我有一个这样的数据库,WorkerID代表工人,TaskNo代表任务,耗时将代表特定工人完成特定任务所需的时间

+----------+--------+-----------+
| WorkerID | TaskNo | TimeTaken |
+----------+--------+-----------+
| 1        | 1      | 7.5       |
+----------+--------+-----------+
| 4        | 1      | 2.5       |
+----------+--------+-----------+
| 1        | 2      | 3.5       |
+----------+--------+-----------+
| 2        | 2      | 1.5       |
+----------+--------+-----------+
| 1        | 3      | 2.5       |
+----------+--------+-----------+
| 2        | 3      | 4.5       |
+----------+--------+-----------+
| 3        | 3      | 3.5       |
+----------+--------+-----------+
| 2        | 4      | 3.5       |
+----------+--------+-----------+
-这个名单还在继续-

在很大的帮助下,我终于能够在vb上显示它了

+--------+------------+------------------+
| TaskNo | NumWorkers | WorkersAvailable |
+--------+------------+------------------+
| 1      | 2          | 1, 4             |
+--------+------------+------------------+
| 2      | 2          | 1, 2             |
+--------+------------+------------------+
| 3      | 3          | 1, 2, 3          |
+--------+------------+------------------+
| 4      | 1          | 2                |
+--------+------------+------------------+
这是对我的员工信息的概述,例如,有多少员工可用于哪个任务。只有两名员工具备执行任务1的技能,他们都是员工1和员工4

现在,我正试图将“WorkersAvailable”中的所有值都存储到一个数组中

  • +----+-----+-------+--+
  • |1,4 | 1,2 | 1,2,3 | 2|
  • +---+------+-------+--+
通过单击按钮,我可以生成一个随机数字符串,从workeravailable列中获得一个可用的随机数

示例:1(第1行)、1(第2行)、3(第3行)、2(第4行)。。。等等

注意:每项任务只需要一名工人

每个数字表示每行中的一个数字,用逗号分隔

  • 从第1行开始,我只能随机选择数字1或4
  • 从第2行开始,我只能随机选择1或2
  • 从第3行开始,我只能随机选择1、2或3
  • 等等
生成一个数字字符串(1,1,3,2)后。 我必须计算完成一个周期任务所需的总时间。每个周期代表一个接一个地完成所有要求的任务。现在,我必须检查数据库中的不同时间,将它们相加,得到一个周期的总时间

我的代码 我尝试的是每次程序循环检查Workeravailable时获取一个(整数)列表。然后选择一个随机数,并使用messagebox显示随机数。我知道这是不对的,但我真的不知道在我的程序中在哪里调用随机值。
这是我第一次接触阵列,因此我们非常感谢您的帮助。

我不清楚您的要求。请更改措辞。同样,社区也喜欢代码——在你的问题中添加一些代码。和/或您拥有的与想要的屏幕截图。一种方法是不要将UI元素与数据模型混淆。从数据源获取WorkersAvail后,将其作为数据保存在代码中。与其将LV单元格解析回数据元素,不如创建一个类,将每个任务的工作人员可用信息存储在一个列表(myClass)中,然后将工作人员列表格式化为“1、2、4”以显示。如果您的问题是“我有什么可能的方法可以做到吗?”那么答案自然是肯定的。你真的需要把这个问题重新整理成一个非常清晰的问题,你尝试的解决方案和你需要的答案。我在你的代码中注意到的一点是行
Dim rnd As New Random
。它在一个循环中,所以它被多次重新实例化。很有可能它将以相同的值播种,然后生成相同的“随机”值。您只需要在循环外实例化一次
Random
类。@如果我将Dim rnd作为新的Random私有,则可能会有神秘性。是否有任何可能的方法可以检查已添加到阵列中的项目?仅显示计数=15
   Sub RefreshLv()

        Using conn = New OleDbConnection
            conn.ConnectionString = myConString
            conn.Open()

            Dim dt As New System.Data.DataTable("ListInfo")
            Using da

                ' fill the DataTable with three columns, the third column being a placeholder that we will fill in below
                Dim Sql As String = ("SELECT [TaskNo], COUNT(*) AS NumWorkers, '' AS WorkersAvailable " & "FROM ScheduleInfo GROUP BY [TaskNo]")
                da.SelectCommand = New OleDbCommand(Sql, conn)
                da.Fill(dt)

                Using cmd2 = New OleDbCommand()

                    ' create a Prepared Statement that we will use for each iteration
                    cmd2.Connection = conn
                    cmd2.CommandText = "SELECT [WorkerID] FROM ScheduleInfo " & "WHERE [TaskNo] = ? " & "ORDER BY [WorkerID]"
                    cmd2.Parameters.Add("?", OleDbType.Integer)
                    cmd2.Prepare()

                    LstViewScheduleInfo.Columns.Add("TaskNo", 150, HorizontalAlignment.Center)
                    LstViewScheduleInfo.Columns.Add("No of Workers", 150, HorizontalAlignment.Center)
                    LstViewScheduleInfo.Columns.Add("Workers Available", 150, HorizontalAlignment.Center)

                    ' foreach row of the DataTable, build the string of WorkerID values
                    Dim RandomEmployee As New List(Of Integer)
                    Dim rnd As New Random

                    For Each dr As System.Data.DataRow In dt.Rows

                        Dim ListEmployee As New List(Of Integer)
                        Dim workerList As String = ""
                        cmd2.Parameters(0).Value = dr("TaskNo")
                        Using rdr As OleDbDataReader = cmd2.ExecuteReader()

                            While rdr.Read()
                                ListEmployee.Add(rdr("WorkerID"))
                                workerList += ", " & rdr("WorkerID")
                            End While
                        End Using

                        ' remove leading ", "
                        'Dim Qpass As String
                        dr("WorkersAvailable") = workerList.Substring(2)
                        Dim randomvalue As Integer = ListEmployee(rnd.Next(0, 2))
                        'Qpass = randomvalue.ToString()
                        'MessageBox.Show(Qpass)
                        RandomEmployee.Add(randomvalue)
                    Next
                    Dim zxc = String.Join((","), RandomEmployee.ToArray())
                    LblRandom1.Text = zxc

                End Using

                ' for demo purposes, just dump the DataTable to the console
                For Each dr As DataRow In dt.Rows()
                    Dim lst As ListViewItem
                    lst = LstViewScheduleInfo.Items.Add(dr(0))

                    For i As Integer = 1 To dt.Columns.Count - 1
                        lst.SubItems.Add(dr(i))
                    Next
                Next

            End Using
            conn.Close()
        End Using


    End Sub

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        RefreshLv()

 End Sub
    Private Sub BtnRandom_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnRandom.Click

        LstViewScheduleInfo.Clear()
        RefreshLv()

    End Sub
End Class