Arrays 将数据从listview存储到阵列&;生成随机值
我非常感谢这个网站提供的答案,因为它对我的学习帮助很大。现在的问题是,我似乎无法将listview中的第三列数据转换为数组形式 我有一个这样的数据库,WorkerID代表工人,TaskNo代表任务,耗时将代表特定工人完成特定任务所需的时间Arrays 将数据从listview存储到阵列&;生成随机值,arrays,vb.net,visual-studio-2010,Arrays,Vb.net,Visual Studio 2010,我非常感谢这个网站提供的答案,因为它对我的学习帮助很大。现在的问题是,我似乎无法将listview中的第三列数据转换为数组形式 我有一个这样的数据库,WorkerID代表工人,TaskNo代表任务,耗时将代表特定工人完成特定任务所需的时间 +----------+--------+-----------+ | WorkerID | TaskNo | TimeTaken | +----------+--------+-----------+ | 1 | 1 | 7.5
+----------+--------+-----------+
| 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|
- +---+------+-------+--+
- 从第1行开始,我只能随机选择数字1或4
- 从第2行开始,我只能随机选择1或2
- 从第3行开始,我只能随机选择1、2或3
- 等等
这是我第一次接触阵列,因此我们非常感谢您的帮助。我不清楚您的要求。请更改措辞。同样,社区也喜欢代码——在你的问题中添加一些代码。和/或您拥有的与想要的屏幕截图。一种方法是不要将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