VB.Net动态图表创建。需要布局帮助

时间:2011-12-12 11:16:41

标签: vb.net charts logic

首先,英语不是!我的第一语/母语。

对于我的实习@这家公司,我正在尝试收集一些数据。网络中有200台PC。所有HP SFF PC。所有的PC都将被包含软件和策略的公司磁盘映像覆盖。他们还获得了bios更新。但随着这几个月的发展,这些版本已经过时了。并不是说需要更新BIOS,我们现在想要在哪个版本的哪个版本上使用哪个版本。

有几种PC型号。 例如。 HP DC7600,HP 7700。

有几个bios版本。 例如。 786G1 v01.10,786G1 v01.16

我正在使用以下方法收集此数据。每个人都拥有某个磁盘的网络共享。(公司文件)。

对于客户端方面,我正在使用WMI(Windows Management Instrumentation)来收集所需的信息。

Sub RetrieveInfo()
    Dim _PCName As String = My.Computer.Name
    Dim _Info As String = vbNullString
    Dim _FileName As String = "G:\BiosVersion\" & _PCName & ".txt"
    Dim _ManagmentC As New ManagementClass("Win32_ComputerSystem")
    Dim _Moc As ManagementObjectCollection = _ManagmentC.GetInstances

    For Each _Mo As ManagementObject In _Moc
        Dim Model() As String = Split(_Mo.Properties("Model").Value.ToString, " ")
        For i = 0 To Model.Length - 1
            If Model(i).ToLower.Contains("dc") Then _Info &= Model(i)
        Next
    Next

    _ManagmentC = New ManagementClass("win32_bios")
    _Moc = _ManagmentC.GetInstances
    For Each _Mo As ManagementObject In _Moc
        _Info &= "|" & _Mo.Properties("SMBIOSBIOSVersion").Value.ToString
    Next

    Try
        If IO.File.Exists(_FileName) Then
            IO.File.Delete(_FileName)
        End If
    Catch ex As IO.IOException
        _FileName = _FileName.Replace(_PCName, _PCName & "-" & New Random().Next(10, 10000))
    End Try

    IO.File.WriteAllText(_FileName, _Info)

End Sub

如您所见,这将在共享中使用String PCName(例如PC1001)创建文本文件。 它写了PC型号和& Bios版本到文本文件。 (例如dc7900 | 786G1 v01.16)


对于服务器方面,图表构建部分,我正在执行以下操作。

Dim Path As String = "G:\BiosVersion\"
Sub UpdateChart()
    Dim PCModels As New List(Of String)
    Dim BiosVersions As New List(Of String)
    Dim Files As IO.FileInfo() = New IO.DirectoryInfo(Path).GetFiles

    For Each File As IO.FileInfo In Files
        If File.Extension = ".txt" Then
            PCModels.Add(IO.File.ReadAllText(File.FullName).Split("|")(0))
            BiosVersions.Add(IO.File.ReadAllText(File.FullName).Split("|")(1))
        End If
    Next
    PCModels = RemoveDuplicates(PCModels)
    BiosVersions = RemoveDuplicates(BiosVersions)

    For i = 0 To chartBios.Series.Count - 1
        chartBios.Series.Remove(chartBios.Series.Item(i))
    Next

    Dim Dictionary As New Dictionary(Of String, Integer)
    For Each Version As String In BiosVersions
        chartBios.Series.Add(Version)
        Dim Count As Integer = 0
        For Each File As IO.FileInfo In Files
            If IO.File.ReadAllText(File.FullName).Split("|")(1).ToLower.Trim = Version.ToLower.Trim Then
                Count += 1
            End If
        Next
        Dictionary.Add(Version, Count)
    Next

    For Each Entry As KeyValuePair(Of String, Integer) In Dictionary
        chartBios.Series(Entry.Key).Points.AddY(Entry.Value)
    Next
End Sub

Function RemoveDuplicates(ByVal inputList As List(Of String)) As List(Of String)
    Dim uniqueStore As New Dictionary(Of String, Integer)()
    Dim finalList As New List(Of String)()
    For Each currValue As String In inputList
        If Not uniqueStore.ContainsKey(currValue) Then
            uniqueStore.Add(currValue, 0)
            finalList.Add(currValue)
        End If
    Next
    Return finalList
End Function

chartBios =图表控件。

会产生以下结果: 我还不能发布任何图像(垃圾邮件预防) http://i.imgur.com/bGpyH.jpg

我要做的是以下内容。 我有3个Vars,Bios版本,每个版本安装了多少次&型号名称。

这是我想要的图表布局的示例。任何人都知道如何创建这种布局?在运行时或静态时,我不在乎它可以在运行时填充。

对于每个Bios版本号,每个PC型号必须有一个条形,其标签代表bios版本的安装次数。

实施例: 我还不能发布任何图像(垃圾邮件预防) http://i.imgur.com/tP0Sf.jpg

1 个答案:

答案 0 :(得分:0)

使用MS Chart Controls,您可以将多个系列添加到一个图表中,每个系列代表您的PC类型,对于每种类型,您都有BIOS版本号和出现次数。

enter image description here

http://msdn.microsoft.com/en-us/library/dd456769.aspx