2015-08-20 2 views
0

Обзор: Я создаю приложение, которое позволяет пользователю создавать регистр с несколькими столбцами и страницами. Количество страниц динамическое (пользователь может добавить столько вкладок, сколько пожелает). Каждая закладка имеет одно 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 
+0

Я нашел результат. Тонкое изменение! Переместите Dim TB как новую TabPage в пределах цикла for и добавьте скобки после этого. Не могу поверить, что все было так просто! Ссылка = http://www.aspforums.net/Threads/293990/Unable-to-load-datagridview-to-more-than-1-tabpage/?p=1#Replies –

ответ

Смежные вопросы