ワークステーションのDNS名を読み込み、ネットワーク接続に問題があるワークステーションがあるかどうかを確認するためにpingを実行するアプリケーションを作成しました。データテーブルの情報がループ内のすべてのデータグリッドビューに移入されない
最後まで、出力ファイル情報を読み込み、DataGridView
(DGV)に表示しようとしています。
問題は、読み込まれたテキストファイルから作成されたコードを表示し、別のDataGridViewを読み込もうとしているときに発生します。それは選択された単一の部屋でうまく動作します。しかし、複数のDataGridViewにデータを出力しようとすると、の最後の DataGridViewだけがそのデータで埋められます。以前のDGVのどれも入力されていません。
さらに詳しい情報として、TabPagesにはそれぞれの部屋に対応するTabPagesがあり、TabPagesにはそれぞれ別々のDataGridViewが置かれています。したがって、合計で12個のDataGridViewがあり、はにデータセット情報を割り当てる必要があります。
私は単純にDGV.Rows.Add()を使ってデータを追加しようとしました[これは実際のコードではなく、単なる説明です]。 DataGridViewに1つの選択肢を使って情報を出力するのにうまくいきましたが、単に行データを追加するときにDataGridViewをクリアする方法が見つかりませんでした。 DGV<Name>.Rows.Clear()
は何もしませんでした。DGV<Name>.Rows.Remove(#)
が間違っていました。DGV<Name>.DataSource = VbNull
も何もしませんでした。その方法では、最初はDGVにデータソースを追加していなかったからです。
各部屋のDGVに適切な出力情報があることを確認するために必要なことについては、適切なDGVがあれば幸いです。
違いがあれば私はVS 2015 Community Editionを使用しています。 LINQプラグインにアクセスすることはできません。ちょうど大文字と小文字の人々がそれを解決する方法かもしれないと考えていました。
Private Sub loadResults()
Dim i As Integer = 0 'Counter variable
Dim fName As String() = GlobalVariables.selectedRoomsList.ToArray
Dim x As Integer = fName.Length 'Upper limit of the Array to be checked against
Dim AppDir As String = Path.GetDirectoryName(Path.GetDirectoryName(Application.StartupPath))
Dim dataName As String = "dgv" & fName(i)
Dim resultFilePath As String = AppDir & "\data\output\" & fName(i) & ".txt"
Dim fileExists As Boolean = File.Exists(resultFilePath)
Dim rowvalue As String
Dim cellvalue(5) As String
Dim oDataTable As DataTable
lblGoodPingTotal.Text = GlobalVariables.successfulPings
lblBadPingTotal.Text = GlobalVariables.failedPings
lblTimeElapsed.Text = GlobalVariables.elapsedTime
Do Until i > x
oDataTable = New DataTable("PingTable")
Dim Column1 As DataColumn = New DataColumn("Computer Name")
Column1.DataType = System.Type.GetType("System.String")
Dim Column2 As DataColumn = New DataColumn("Status")
Column2.DataType = System.Type.GetType("System.String")
Dim Column3 As DataColumn = New DataColumn("IP Address")
Column3.DataType = System.Type.GetType("System.String")
Dim Column4 As DataColumn = New DataColumn("Bytes Sent")
Column4.DataType = System.Type.GetType("System.String")
Dim Column5 As DataColumn = New DataColumn("Round Trip")
Column5.DataType = System.Type.GetType("System.String")
Dim Column6 As DataColumn = New DataColumn("TTL")
Column6.DataType = System.Type.GetType("System.String")
oDataTable.Columns.Add(Column1)
oDataTable.Columns.Add(Column2)
oDataTable.Columns.Add(Column3)
oDataTable.Columns.Add(Column4)
oDataTable.Columns.Add(Column5)
oDataTable.Columns.Add(Column6)
If fileExists Then
Using sReader As New StreamReader(resultFilePath)
While sReader.EndOfStream = False
Dim rowAdd As DataRow
rowAdd = oDataTable.NewRow()
rowvalue = sReader.ReadLine()
cellvalue = rowvalue.Split(","c)
rowAdd.ItemArray = cellvalue
oDataTable.Rows.Add(rowAdd)
End While
sReader.Close()
End Using
dataPrint(dataName, oDataTable)
i = i + 1
Else
MsgBox("Error! The file for Room" & fName(i) & "is not found.", vbOKOnly = MsgBoxStyle.Critical, "Error")
Exit Do
End If
Loop
End Sub
Private Sub dataPrint(iName As String, iTableData As DataTable)
Dim dgvName As String = iName
Dim oDataTable As DataTable = iTableData
If dgvName = "dgvA1402" Then
dgvA1402.DataSource = oDataTable
ElseIf dgvName = "dgvA1532" Then
dgvA1532.DataSource = oDataTable
ElseIf dgvName = "dgvA1D038" Then
dgvA1D038.DataSource = oDataTable
ElseIf dgvName = "dgvA1D042" Then
dgvA1D042.DataSource = oDataTable
ElseIf dgvName = "dgvA1D043B" Then
dgvA1D043B.DataSource = oDataTable
ElseIf dgvName = "dgvA1E014A" Then
dgvA1E014A.DataSource = oDataTable
ElseIf dgvName = "dgvA1E036" Then
dgvA1E036.DataSource = oDataTable
ElseIf dgvName = "dgvA1E047C" Then
dgvA1E047C.DataSource = oDataTable
ElseIf dgvName = "dgvA1E047D" Then
dgvA1E047D.DataSource = oDataTable
ElseIf dgvName = "dgvA1E047F" Then
dgvA1E047F.DataSource = oDataTable
ElseIf dgvName = "dgvA1E047G" Then
dgvA1E047G.DataSource = oDataTable
ElseIf dgvName = "dgvA1E048" Then
dgvA1E048.DataSource = oDataTable
End If
End Sub
データソースoDataTableを1つ作成し、次の部屋で常にそれを(新規作成で)再定義します。最後の部屋だけがデータを持っています。各部屋のデータの新しいコピーを作成する必要があります。 –
私はそれについて考えて、oDatatableを配列にするようにしました。 Dim oDataTable(x)as DataTable しかし、これは動作しませんでしたが、実際には何もDataGridViewsに表示されませんでした。各テキストファイルでこれをループする方法はありますか? テーブル名プロパティを変数に変更するだけで十分ですか、または "As DataTable"オブジェクトの実際の新しいインスタンスが必要ですか? – Lorok
データソース、データグリッド(データソースにリンクされている)、およびこの ":ルーム"に必要なその他のコントロールを含むタブページに基づいてユーザーコントロールを作成してみてください。次に、データを使用して各部屋のこれらの1つを生成し、タブコントロールTabControl.Controls.Add()に追加します。このタブは、独自のデータソースに含まれています。 1つの場所に部屋のコードしかありません。 –