【发布时间】:2015-08-20 13:35:51
【问题描述】:
概述:我正在创建一个允许用户创建具有多个列和页面的寄存器的应用程序。页数是动态的(用户可以添加任意数量的标签页)。每个标签页都有一个显示列的网格视图。列由用户定义。 当他们创建标签页或新列时,它会将信息发布到 XML 文件中。打开应用程序时,它会在 XML 中读取以显示工作表(带有名称)和列(带有名称)。
问题:当我为一个带有网格视图的标签页运行下面的代码时,它一切正常(我可以在标签页中看到网格视图)。当我为多个标签页运行代码时,我可以看到标签页,但不显示 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 循环”中,然后添加括号。我不敢相信它是那么简单!链接=aspforums.net/Threads/293990/…
标签: vb.net datagridview tabpage