如何在不同的列表上合作/绑定项目

时间:2013-12-11 05:11:23

标签: .net vb.net winforms generic-list

这些是我的宣言..

Public fList As New List(Of Form)
Dim mNameList As New List(Of String)
Dim mList As New List(Of GMapMarker)
Dim cList As New List(Of Integer)     'recently added code
Dim hList As New List(Of String)      'recently added code

这是我的代码,我在列表中添加项目..

For Each dtrow In markerDtable.Rows
        marker = New GMapMarkerGoogleGreen(New PointLatLng(dtrow("Latitude"), dtrow("Longitude")))
        marker.ToolTipText = dtrow("MarkerName")

        mNameList.Add(dtrow("MarkerName"))
        cList.Add(dtrow("CameraID"))            'recently added code

我真的希望你得到我想说的话。 这对我来说真的很难。洛尔

无论如何,正如您所看到的,我为我的elements添加List我数据库中的每个数据。这段代码给了我需要的结果。在Form_Load加载地图上的所有数据(标记)。如果我在表单加载时添加了另一个数据(name,Lat,Lng),则在地图上添加了另一个标记。

列表mNameList代表标记名称列表而不是ID。只是名字..
到下一个代码..

For Each m In mNameList
            For Each c In cList                    'recently added code
                If item.ToolTipText = m Then
                    Dim f As New Form2
                    fList.Add(f)
                    mList.Add(item)
                    With f
                        .Show()

                        .AxXHDec1.Camera = c       'recently added code
                        .AxXHDec1.Host = some ip   'recently added code

                        Dim p As New Point
                        p = item.LocalPosition + New Point(15, 30)
                        .Location = p
                        .Text = m
                    End With
                    Exit Sub
                End If
            Next
Next

现在这段代码在Marker_Click事件上。因此,每次单击标记时,它会向我显示添加到fList的表单,然后显示 表单将显示给特定标记的相应条件。
所以,如果我有一个名为“高尔夫俱乐部”的标记,将出现高尔夫俱乐部..

在这种情况下,我可以提出我想要的表格 回到我面临的问题..

这是我的数据库.. cList必须包含 CameraID
所以如果事情进展顺利,如果我提出starmall我应该从 Camera3 获取 starmall表单 +视频供稿

enter image description here

结果: OnMarker_Click - >我点击的所有标记,只显示Camera1 ..虽然我想要的是拔出相机#取决于 MarkerName / Form.Text 我点击的内容..

提醒: 最近添加了代码 - 意味着这是我第一次尝试解决我的解决方案。其他代码工作正常。我只需要一些解决方法。

这是不是google的API ..我正在使用codeplex中的gmaps.net。

问题:如何在参考MarkerName时取出相机#?

向我提问,让你更清楚。

1 个答案:

答案 0 :(得分:1)

请注意,

        For Each c In cList                    'recently added code
            If item.ToolTipText = m Then

您没有显示此item的来源。

无论如何,ToolTipTextm都独立于cameraID c。因此cList中的第一个c将始终匹配所有标记。这就是你获得camera1的原因。


我建议进行一些代码重构。你说所有列表都包含相同数量的项目,每个项目对应一个数据表中的标记行。所以,最好让一个小班的人说MarkerRow

class MarkerRow
    dim MarkerName as string
    dim cameraID as integer
    dim hostAddress as string

    dim marker as GMapMarker
end class

只创建一个列表,使其成为标记类型而不是字符串和整数

dim markers as new List(of MarkerRow)

现在迭代数据表并填充一个数据行中的每个项目

For Each dtrow In markerDtable.Rows
    dim marker = New GMapMarkerGoogleGreen(New PointLatLng(dtrow("Latitude"), dtrow("Longitude")))
    marker.ToolTipText = dtrow("MarkerName")

    dim markerRow = new MarkerRow
    with markerRow
        .MarkerName = dtrow("MarkerName")
        .cameraID = dtrow("CameraID")
        .hostAddress = dtrow("hostAddress")

        .marker = marker
    end with
next

这样,当您需要标记时,您始终可以在一个地方获得所有信息

dim m as MarkerRow = markers(0) ' or whatever by any criteria you like

然后你会自动拥有

m.cameraID
m.marker
m.markerName

等等