如何引用位于不同选项卡VB.NET上的控件

时间:2013-02-26 18:21:05

标签: vb.net datagridview tabcontrol

希望在另一个按代码创建的选项卡上引用数据网格视图。

我想使用当前所选标签中的数据网格视图的列填充组合框。现在我只能用组合框填充用户加载的最后一个文件,而不是选择w / e选项卡。

Dim mstrFirstFile As String = ""
Dim mstrFileName As String = ""
Dim mdstTableInput As New DataSet
Dim mintCounter As Integer
Dim mdgvTab As DataGridView

Public Function CreateNewDGVInsideNewPageTab() As DataGridView
    Dim tbpNewTab As New TabPage()
    tbpNewTab.Text = mstrFileName

    Dim mdgvTabControl As New DataGridView
    mdgvTabControl.Dock = DockStyle.Fill
    mdgvTabControl.Name = ("Grid" + ToString(mintCounter))

    tbpNewTab.Controls.Add(mdgvTabControl)
    tbcsource.TabPages.Add(tbpNewTab)
    tbcsource.SelectedTab = tbpNewTab
    Return mdgvTabControl
End Function

Private Sub generate()

    Dim objCLSConverter As New DataTier.clsCSVConverter
    Dim strNewXMLPath As String = ""
    Dim xmlFile As XmlReader

    If mstrFirstFile.Length > 1 Then


        strNewXMLPath = objCLSConverter.writeXML(mstrFirstFile)

        xmlFile = XmlReader.Create(strNewXMLPath, New XmlReaderSettings())

        Dim dsTemp As DataSet = New DataSet
        Dim dtTable As DataTable = Nothing

        dsTemp.ReadXml(xmlFile)
        dtTable = dsTemp.Tables(0).Copy
        dtTable.TableName = mintCounter
        mdstTableInput.Tables.Add(dtTable)

        mdgvTab = CreateNewDGVInsideNewPageTab()

        mdgvTab.DataSource = mdstTableInput.Tables(mintCounter)

        mintCounter = (mintCounter + 1)

        cbxColumnsUpdate()

        xmlFile.Close()

    End If
End Sub

任何帮助或如果您需要更多我的代码,请告诉我。


程序接受用户添加的任何.csv或.xls文件并将其投入数据集。它将这些文件添加到新生成的代码选项卡中,其中包含一个数据网格视图,其中包含加载到其中的文件。

选择选项卡后,将使用该选项卡数据网格视图的所有列名填充组合框,您可以选择任何选项卡,它将重新填充该选项卡的组合框。然后,您可以从组合框中选择列名称,然后在文本框中输入您在该列中搜索的w / e,它只是一个select where子句。

然后,这些数据将被丢弃到下面的数据网格视图中,供用户查看和导出到Excel或继续更改。这一切都用于一般报告和数据按摩。

现在问题是组合框不会根据所选的选项卡重新填充。

1 个答案:

答案 0 :(得分:0)

只是一个选项 - 转换它:

Dim mdgvTab As DataGridView

到字典:

Dim mdgvTabDictionary As Dictionary(Of Integer, DataGridView)

然后,在Sub generate()内你替换它:

mdgvTab = CreateNewDGVInsideNewPageTab()

到此:

Dim mdgvTab As DataGridView = CreateNewDGVInsideNewPageTab()
mdgvTabDictionary.Add(mintCounter, mdgvTab)

现在您不需要处理控件层次结构并按名称查找控件。相反,您可以通过索引找到所需的DataGridViewmdgvTabDictionary(index)

不要忘记在mdgvTabDictionarySub New(或任何其他适合您情况的地方)初始化Form_Load

mdgvTabDictionary = New Dictionary(Of Integer, DataGridView)