我有一个用VB.NET编写的应用程序,它从文件中读取数据并在屏幕上显示数据。
根据文件中的数据,程序有一个TabControl,最多有3个选项卡,每个选项卡依次有一个DataGridView用于显示数据。例如,我有一个TabControl,它有一个名为“Saturday”的标签和一个名为“Sunday”的标签。
我遇到的问题是,当我从文件中读取数据时,程序会显示星期六选项卡网格上的所有数据,因为我不确定如何在星期日选项卡上引用网格。
要添加DataGridView,我使用以下代码:
Grid = New DataGridView
Grid.Dock = DockStyle.Fill
Grid.Name = "Grid" & TabControl.SelectedIndex
Grid.Tag = "Grid" & TabControl.SelectedIndex
这就是我在阅读数据的方式:
If reader.GetAttribute("controltype") = "Tab" Then
SelectedTab = reader.Name
End If
If reader.Name = "cell" Then
y = y + 1
Grid.Rows(i).Cells(y).Style.BackColor = Color.FromName(reader.ReadElementString("cell"))
End If
我几乎想做的事情就像(伪代码):
SelectedTab.Grid.Rows(i).Cells(y).Style.BackColor = Color.FromName(reader.ReadElementString("cell"))
然而,当我使用上面的代码时,它会抱怨:
'网格'不是'字符串'的成员
我希望你理解这个问题。如果您需要澄清,请告诉我
答案 0 :(得分:0)
您的代码有点不清楚。但是,在我看来,以下一行:
If reader.GetAttribute("controltype") = "Tab" Then
SelectedTab = reader.Name
End If
正在创造至少一个问题。看起来你试图通过其名称的字符串表示来引用Tabpage控件,但除非我错过了什么,该行实际上正在做的是尝试使tabpage控件类型(“SelectedTab”)引用字符串类型。如果是这种情况,那么您将尝试这样做:
If reader.GetAttribute("controltype") = "Tab" Then
TabControl1.SelectedTab = TabControl1.TabPages(reader.name)
End If
从您发布的代码中说出来有点难以理解,但这可能会让您走上正确的道路。
++++++++++++
更新:从您的代码中可以看出,您通过将其所在选项卡的索引附加到字符串“grid”来命名每个DGV控件。我将假设您正在使用名为“SelectedTab”的类成员变量来表示在控件中选择的当前选项卡。我会假设你在课堂上做了类似的事情:
'Form-or-class scoped memebr variables:
Private SelectedTab As TabPage
Private SelectedGrid As DataGridView
您应该能够使用以下内容引用活动网格控件:
Private Sub TabControl1_SelectedIndexChanged(sender As Object, e As System.EventArgs) Handles TabControl1.SelectedIndexChanged
' Set SelectedTab member variable to refer to the new selected tab page:
SelectedTab = TabControl1.SelectedTab
' Set the SelectedGrid to refer to the grid control hosted on the selected tab page:
SelectedGrid = TabControl1.SelectedTab.Controls("Grid" & TabControl1.SelectedIndex.ToString())
End Sub
从这里开始,您应该能够使用SelectedGrid的成员变量来引用当前在选项卡控件中选择了标签页的网格。
仅使用代码片段来解决您的问题是一项挑战。如果您有其他困难,请发布更多代码,以便我们更好地了解其他情况。
希望有所帮助!
答案 1 :(得分:0)
好的,我会做这样的事情。也许您可以简单地使用DataSet将XML数据加载到一行中(如果它们之前已使用DataSet.WriteXML
保存)。
Dim ds As New DataSet
Dim p As TabPage
Dim gv As DataGridView
ds.ReadXml("F:\testdata.xml")
For i As Integer = TabControl1.TabPages.Count - 1 To 0 Step -1
TabControl1.TabPages.RemoveAt(i)
Next
For Each dt As DataTable In ds.Tables
p = New TabPage(dt.TableName)
gv = New DataGridView
' ... configure the gv here...
gv.AutoGenerateColumns = True
gv.Dock = DockStyle.Fill
' ...
gv.DataSource = dt
TabControl1.TabPages.Add(p)
p.Controls.Add(gv)
Next