0

ファイルからデータを読み取り、画面にデータを表示する VB.NET で記述されたアプリケーションがあります。

ファイル内のデータに応じて、プログラムには最大 3 つのタブを持つ TabControl があり、各タブにはデータを表示するための DataGridView があります。たとえば、「Saturday」というタブと「Sunday」というタブを持つ TabControl があります。

私が抱えている問題は、ファイルからデータを読み取るときに、日曜日のタブでグリッドを参照する方法がわからないため、プログラムが土曜日のタブ グリッドにすべてのデータを表示することです。

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"))

ただし、上記のコードを使用すると、次のように不平を言います。

「Grid」は「String」のメンバーではありません

問題を理解していただければ幸いです。説明が必要な場合はお知らせください

4

2 に答える 2

0

さて、私はこのようなことをします。おそらく、DataSet を使用して、XML データを 1 行で読み込むことができます (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
于 2013-01-27T13:42:25.657 に答える
0

あなたのコードは少し不明確です。ただし、次の行のように見えます。

If reader.GetAttribute("controltype") = "Tab" Then
    SelectedTab = reader.Name
End If

少なくとも 1 つの問題を引き起こしています。名前の文字列表現で Tabpage コントロールを参照しようとしているように見えますが、何かを見落としていない限り、その行が実際に行っているのは、タブページ コントロール タイプ ("SelectedTab") が文字列タイプを参照するようにしようとしていることです。 . その場合は、代わりにこれを試してください。

If reader.GetAttribute("controltype") = "Tab" Then
    TabControl1.SelectedTab = TabControl1.TabPages(reader.name)
End If

投稿したコードからはわかりにくいかもしれませんが、正しい道をたどることができるかもしれません。

++++++++++++

更新: コードから、DGV コントロールが配置されているタブのインデックスを文字列「グリッド」に追加して、各 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 のメンバー変数を使用して、タブ コントロールで選択されたタブ ページに存在するグリッドを参照できるようになります。

コードの断片だけで問題に対処するのは困難です。他に問題がある場合は、コードをさらに投稿してください。他に何が起こっているかをよりよく確認できます。

それが役立つことを願っています!

于 2013-01-27T13:34:26.173 に答える