Обзор: Я создаю приложение, которое позволяет пользователю создавать регистр с несколькими столбцами и страницами. Количество страниц динамическое (пользователь может добавить столько вкладок, сколько пожелает). Каждая закладка имеет одно gridview с отображаемыми столбцами. Столбцы определяются пользователем. Когда они создают вкладку или новый столбец, она помещает информацию в файл XML. при открытии приложения, которое он читает в XML, чтобы показать листы (с именами) и столбцы (с именами).Загрузка нескольких Datagridviews в разные вкладки
Проблема: Когда я запускаю код ниже для одной закладки с gridview, все работает (я вижу сетку в закладке). когда я запускаю код для более чем одной закладки, я могу видеть вкладки, но gridview не отображается.
Private Sub UF_DEF_COL_Load(sender As Object, e As System.EventArgs) Handles Me.Load
Dim doc As New XmlDocument()
doc.Load("C:\Users\geoff.warrington\Documents\Visual Studio 2010\Projects\Project Register\Project Register\Tab_List.xml")
Dim root As XmlElement = doc.DocumentElement
Dim node_list As XmlNodeList = root.GetElementsByTagName("Tab")
Me.SHEET_DEF.TabPages.Remove(Register)
Dim x As Integer
Dim Y As Integer
Dim TB = New TabPage
Dim Col_Data_Grid As New DataGridView
For x = 0 To node_list.Count - 2
Dim No_Cols As Integer = node_list(x).ChildNodes.Count - 1
Me.SHEET_DEF.TabPages.Add(TB)
With TB
.Location = New System.Drawing.Point(4, 22)
.Name = node_list(x).FirstChild.InnerText
.Padding = New System.Windows.Forms.Padding(3)
.Size = New System.Drawing.Size(805, 172)
.TabIndex = x + 1
.Text = node_list(x).FirstChild.InnerText
.UseVisualStyleBackColor = True
End With
Col_Data_Grid = New DataGridView() With { _
.Name = node_list(x).FirstChild.InnerText,
.ColumnCount = node_list(x).ChildNodes.Count - 1,
.Location = New Point(8, 8),
.Size = New Size(1000, 25),
.AutoSizeRowsMode = _
DataGridViewAutoSizeRowsMode.DisplayedCellsExceptHeaders,
.ColumnHeadersBorderStyle = DataGridViewHeaderBorderStyle.Single,
.CellBorderStyle = DataGridViewCellBorderStyle.Single,
.GridColor = Color.Black,
.RowHeadersVisible = False,
.SelectionMode = DataGridViewSelectionMode.FullRowSelect,
.MultiSelect = False,
.Dock = DockStyle.Fill,
.Visible = True}
For Y = 1 To No_Cols
Col_Data_Grid.Columns(Y - 1).Name = node_list(x).ChildNodes(Y).InnerText
Next
SHEET_DEF.TabPages(x).Controls.Add(Col_Data_Grid)
Next
End Sub
Friend WithEvents Register As System.Windows.Forms.TabPage
Friend WithEvents Col_Sel As System.Windows.Forms.DataGridView
Friend WithEvents ID As System.Windows.Forms.DataGridViewTextBoxColumn
Friend WithEvents Col_Data_Grid As DataGridView
EDIT Новый код, как показано ниже. У этого все еще есть одна и та же проблема, но я чувствую, что она ближе. где «node_list.count - 2» возвращает одну вкладку, а представление datagridview полностью видно. Когда я меняю его на «node_list.count - 1», я вижу два табуляции, но ни одна из них не содержит datagridview. Я не понимаю, почему это будет работать для одного, но не более одного.
Private Sub UF_DEF_COL_Load(sender As Object, e As System.EventArgs) Handles Me.Load
Dim doc As New XmlDocument()
doc.Load("C:\Users\geoff.warrington\Documents\Visual Studio 2010\Projects\Project Register\Project Register\Tab_List.xml")
Dim root As XmlElement = doc.DocumentElement
Dim node_list As XmlNodeList = root.GetElementsByTagName("Tab")
Me.SHEET_DEF.TabPages.Remove(Register)
Dim x As Integer
Dim Y As Integer
Dim TB As New TabPage
For x = 0 To node_list.Count - 2
Dim No_Cols As Integer = node_list(x).ChildNodes.Count - 1
Me.SHEET_DEF.TabPages.Add(TB)
With TB
.Location = New System.Drawing.Point(4, 22)
.Name = node_list(x).FirstChild.InnerText
.Padding = New System.Windows.Forms.Padding(3)
.Size = New System.Drawing.Size(805, 172)
.TabIndex = x + 1
.Text = node_list(x).FirstChild.InnerText
.UseVisualStyleBackColor = True
End With
Dim Col_Data_Grid = New DataGridView()
With Col_Data_Grid
.Name = node_list(x).FirstChild.InnerText & "DGV"
.ColumnCount = node_list(x).ChildNodes.Count - 1
.Location = New Point(8, 8)
.Size = New Size(1000, 25)
.AutoSizeRowsMode = _
DataGridViewAutoSizeRowsMode.DisplayedCellsExceptHeaders
.AutoSizeColumnsMode = _
DataGridViewAutoSizeColumnMode.DisplayedCells
.ColumnHeadersBorderStyle = DataGridViewHeaderBorderStyle.Single
.CellBorderStyle = DataGridViewCellBorderStyle.Single
.GridColor = Color.Black
.RowHeadersVisible = False
.SelectionMode = DataGridViewSelectionMode.FullRowSelect
.MultiSelect = False
.Dock = DockStyle.Fill
.Visible = True
End With
For Y = 1 To No_Cols
Col_Data_Grid.Columns(Y - 1).Name = node_list(x).ChildNodes(Y).InnerText
Next
Col_Data_Grid.Parent = Me.SHEET_DEF.TabPages(x)
Me.SHEET_DEF.TabPages(x).Controls.Add(Me.Col_Data_Grid)
Next
End Sub
Friend WithEvents Register As System.Windows.Forms.TabPage
Friend WithEvents Col_Sel As System.Windows.Forms.DataGridView
Friend WithEvents ID As System.Windows.Forms.DataGridViewTextBoxColumn
Friend WithEvents Col_Data_Grid As System.Windows.Forms.DataGridView
End Class
Я нашел результат. Тонкое изменение! Переместите Dim TB как новую TabPage в пределах цикла for и добавьте скобки после этого. Не могу поверить, что все было так просто! Ссылка = http://www.aspforums.net/Threads/293990/Unable-to-load-datagridview-to-more-than-1-tabpage/?p=1#Replies –