新手问题:VB.net数组数组进入datagridviewer

时间:2014-03-18 14:50:05

标签: arrays vb.net datagridview

好吧,这可能已经在某个地方有了一个主题(如果有人知道,请随意指出我朝这个方向!),但是一段时间的搜索并没有引导我去。

我目前正在使用datagrid查看器在我的vb.net(VS 2013)程序中显示一个表。我使用数据库/ sql设置(虽然在那里有很多在线教程)。我在网络上查看我连接的任何设备。我将把他们的IP地址,固件,访问时间等变成一个字符串。

像这样:

Dim device_info as string() = {"webcam", "123.123.123.123", _
 "3/18/2014", "firmware version 2"} 

你明白了。

所以我将有一个关于这个设备的字符串数组,以及连续的多个设备。基本上是每个设备的表格和相应的信息。

我的问题是我正试图在数据网格中显示这些信息,我不能说得对。我希望每一行都是一个设备,并且device_info字符串数组的每个元素都是一个单元格。可能还有一列复选框可供选择(我以后可以处理的问题)。但我在制作矩阵或数组数组时遇到问题,并且能够将其显示在gridviewer中。这是我到目前为止(为练习输入的垃圾字符串):

Dim device1 As String() = {"Acti", "00:09:10", "SF0900", "FirmwareVersion 1.0"}
Dim device2 As String() = {"Sony", "03:45:h5", "KK5000", "Firm ware 8.0"}

Dim arraylist As New ArrayList
    arraylist.Add(device1)
    arraylist.Add(device2)

Dim dt As New DataTable
    dt.Columns.Add("Brand")
    dt.Columns.Add("Mac")
    dt.Columns.Add("Model")
    dt.Columns.Add("Firmware")

  For i As Integer = 0 To arraylist.Count - 1
        Dim dr As DataRow
        dr = dt.NewRow()
        For j As Integer = 0 To dt.Columns.Count - 1
            dr.Item(j) = arraylist(j)
        Next
        dt.Rows.Add(dr)

    Next

    dataGridViewer.DataSource = dt

这在构建中出错,主要是因为arraylist(j)行。我真的想访问arraylist(设备(j)),但我不清楚如何做到这一点。   有没有办法访问数组列表中的数组元素?或者我是否以完全错误的方式解决这个问题并且有一种更有效的方法?我基本上想要复制矩阵并将其导入网格查看器。在这里感觉像一个假人:D。

感谢您的帮助!! -K

3 个答案:

答案 0 :(得分:1)

我相信这对你来说是个问题:)

请尝试使用此行:

dr.Item(j) = arraylist(i)(j)

i =设备。 on = Cell Values。

答案 1 :(得分:1)

我通常会尝试避免使用数组,因为我更喜欢列表。下面是我放在一起的快速示例,它可以满足您的需求,但使用的是列表和结构。我认为你会发现它比你试图用数组做的更容易一些。

Structure device
    Dim brand As String
    Dim mac As String
    Dim model As String
    Dim firmware As String
End Structure

Dim listOfDevices As New List(Of device)

Public Sub UpdateDataGridView()

    Dim device1 As New device
    device1.brand = "Acti"
    device1.mac = "00:09:10"
    device1.model = "SF0900"
    device1.firmware = "FirmwareVersion 1.0"

    Dim device2 As New device
    device2.brand = "Sony"
    device2.mac = "03:45:h5"
    device2.model = "KK5000"
    device2.firmware = "Firm ware 8.0"

    listOfDevices.Add(device1)
    listOfDevices.Add(device2)

    For Each d As device In listOfDevices
        DataGridView1.Rows.Add(d.brand, d.mac, d.model, d.firmware)
    Next

End Sub

请记住,为了使上面的示例能够工作,需要创建DataGridView的列。

答案 2 :(得分:0)

我发现这是我们问题的解决方案,UbicBase(,)传递对多个数组的引用因为我使用数组而不是SQL ado连接(这是一种练习和一种不访问的方式数据库很多次)" tabla"是我在这里没有使用的东西所以它在声明中但不在函数的实现中。

该功能正在使用"模块"所以它正在填充来自" outside"的数据网格视图。形式,这就是它调用它的原因" Form4.DataGridView1.Rows.Insert((a - 1),arr)"。

我使用一级数组传输来自" line"数据网格视图中的二维数组,如果适用于多种大小的数组,则可以使用" cantCamp"从另一个FUNCTION中的数组声明中获取数组的列数。 " CantLines"是数组的行数,并在数组声明为" cantCamp"。

的情况下被填充。
Public Function cargarDataGrid(ByRef UbicBase(,) As String, ByVal tabla As String)
    'DataGridView1
    Form4.DataGridView1.Rows.Clear()
    Form4.DataGridView1.Columns.Clear()

    'Call buscarArchivos(tabla)
    If cantCamp <= 0 Then
        cantCamp = 2
    End If

    If cantLineas <= 0 Then
        cantLineas = 2
    End If
    For a As Integer = 0 To cantCamp
        Form4.DataGridView1.Columns.Add(UbicBase(0, a).ToString, UbicBase(0, a).ToString())
    Next
    Form4.DataGridView1.Rows.Add()
    Form4.Label1.Text = Form4.DataGridView1.Columns.Count.ToString()
    Form4.Label2.Text = Form4.DataGridView1.Rows.Count.ToString()
    For a As Integer = 0 To cantLineas
        Dim arr(cantCamp) As String
        For b As Integer = 0 To cantCamp
            'Form4.DataGridView1.SetBounds(int_a, int_b, 50, 50)
            arr(b) = UbicBase(a, b)
        Next
        If a > 0 Then
            Form4.DataGridView1.Rows.Insert((a - 1), arr)
        End If

    Next
End Function