【问题标题】:Newbie prob: VB.net array of arrays into datagridviewer新手问题:VB.net 数组中的数组进入 datagridviewer
【发布时间】:2014-03-18 14:50:05
【问题描述】:

好吧,这可能已经在某个地方有一个线程(如果有人知道,请随时向我指出那个方向!),但是一段时间的搜索并没有让我找到它。

我目前正在使用数据网格查看器在我的 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(device(j)),但我不清楚如何做到这一点。 有没有办法访问数组列表中的数组元素?还是我会以整个错误的方式来解决这个问题,并且有更有效的方法?我基本上想复制一个矩阵并将其导入网格查看器。在这里感觉有点像假人:D。

感谢您的帮助!! -K

【问题讨论】:

    标签: arrays vb.net datagridview


    【解决方案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】:

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

    试试这一行:

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

    i = 设备。 j = 单元格值。

    【解决方案3】:

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

    该函数在“模块”中工作,因此它从表单“外部”填充 datagridview,这就是为什么它称它为“Form4.DataGridView1.Rows.Insert((a - 1), arr)”。

    我使用一级数组从二维数组的“行”传递数据到 datagridview,如果使用多种大小的数组,因为“cantCamp”正在获取数组的列数从另一个函数中的数组声明。 “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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-02
      • 1970-01-01
      • 2022-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多