Я создал приложение, которое считывает имена DNS рабочих станций и пингорует их, чтобы увидеть, есть ли какие-либо рабочие станции, которые имеют проблемы с сетевым подключением.Информация таблицы данных, не заполняющая все данные Grid View in Loop
Все отлично до конца, где я пытаюсь прочитать информацию о выходных файлах и отображать ее в DataGridView
(DGV).
Проблема возникает, когда я пытаюсь отобразить созданный код, который можно использовать в текстовом файле, и заполнять разные DataGridView. Он отлично работает с выбранной комнатой. Но когда я пытаюсь вывести данные в несколько DataGridViews, только последние DataGridView заполняется его данными. Ни один из предыдущих DGV не заселен.
Немного больше информации, у меня есть TabControl с вкладками, которые соответствуют каждой комнате, в тех вкладках, где находится каждый отдельный DataGridView. Таким образом, в общей сложности есть 12 DataGridViews, которые могут нуждаться в информации о данных, назначаемой ее DataSource.
Я пробовал просто добавлять данные через DGV.Rows.Add() [это не фактический код, просто объяснение]. Теперь, когда это отлично работало для вывода информации в DataGridView с помощью одного выбора, я не смог найти способ очистить DataGridView, когда я просто добавлял в него данные Row. 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 и постоянно переопределяете (по новому) его для следующей комнаты. Так что только в последней комнате есть данные. Вы должны создать новую копию данных для каждой комнаты. –
Я подумал об этом и попытался сделать oDatatable в массив, поэтому что-то вроде: Dim oDataTable (x) как DataTable Но это не показало, что оно работает, и фактически не привело к тому, что ничего не отображалось ни в одном из DataGridView. Есть ли способ сделать это через каждый текстовый файл? Устанавливает ли свойство имен таблиц для переменной (которая изменяется) достаточно или мне нужен фактический новый экземпляр объекта «Как DataTable»? – Lorok
Попробуйте создать пользовательский элемент управления на основе закладки, содержащей источник данных, datagrid (связанный с источником данных) и любые другие элементы управления, необходимые для этой «комнаты». Затем используйте свои данные для создания одного из них для каждой комнаты и добавьте его в элемент управления TabControl.Controls.Add(). Вкладка будет автономной с собственным источником данных. И у вас есть только код для комнаты, в одном месте. –