2013-02-26 42 views
0

尋找在代碼創建的另一個選項卡上引用數據網格視圖。如何引用位於不同選項卡上的控件VB.NET

我想使用當前選定選項卡中的數據網格視圖的列填充組合框。現在我只能得到組合框來填充用戶加載的最後一個文件,而不是選擇了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文件。它將這些文件添加到一個新的代碼生成的Tab中,裏面有一個數據網格視圖,並將文件加載到其中。

當選擇一個選項卡時,組合框將填充該選項卡數據網格視圖的所有列名稱,您可以選擇任何選項卡,並且它將重新填充該選項卡的組合框。然後,您可以從組合框中選擇列名稱,然後在文本框中輸入您要在該列中搜索的文本框,它只是一個select where子句。

然後這些數據將被扔進下面的數據網格視圖,供用戶查看並導出爲ex​​cel或繼續更改。這是爲了一般的報告目的和按摩數據。

現在問題是組合框將不會基於所選標籤重新填充。

+0

如果在設計時,應控制可在形式層面。在運行時,每個選項卡控件都包含標籤頁。只需引用TabPage.Controls。 – Neolisk 2013-02-26 18:26:54

+0

有我這樣的例子嗎?編碼不太好:P.然後試圖引用該選項卡中的數據網格視圖似乎有點棘手加入它們。 – Xnub 2013-02-26 18:39:04

+0

細節很少,很難說清楚。一種選擇是使用'mdgvTab.Controls(「Grid」+ ToString(mintCounter))'',但最好保留一個'ToString(mintCounter),DataGridView'的Dictionary。你需要使用字典的例子嗎? – Neolisk 2013-02-26 18:57:09

回答

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)

不要忘記Sub New,初始化mdgvTabDictionary(或任何其他地方,如適用於您的情況):

mdgvTabDictionary = New Dictionary(Of Integer, DataGridView) 
+0

當我嘗試使用'strColNames(i)= mdgvTabDictionary(mintCounter).Columns(i).Name'時,得到錯誤「給定的鍵沒有出現在字典中」,因爲它對我來說有點奇怪。 – Xnub 2013-02-27 16:16:36

+0

@Xnub:如果你增加了'mintCounter',你將它作爲'generate'的最後一個語句之一,它將等於'(x + 1)',其中'x'是字典中最大的鍵,當然,這個關鍵是不存在的。在做之前,你需要知道你將訪問哪個索引。我提到'mintCounter'來顯示'Key'值的邏輯理由。你可能不會使用這個特定的變量(從我在代碼中看到的)。 – Neolisk 2013-02-27 17:40:48

+0

好吧,我看到使用'mintCounter'的問題。但仍然無法找到一種方法來選擇我想要的字典的正確索引。第一個將選擇罰款和填充組合框。但如果我添加另一個選項卡它吹起同樣的錯誤,但生成該選項卡的combox,但不再會生成combox,如果我再次選擇第一個選項卡。 – Xnub 2013-02-27 19:02:20

相關問題