2

私の問題は解決しませんでしたが、似たような1つの質問を調べて見つけました。他の質問は、実行時にdatagridview-is-blank-after-changing-datasource-at-runtimeでした。

これは、さらに単純な答えを持つ単純な質問だと確信しています。最初のWindowsフォームアプリケーションで作業し、ASP.Netとは大きく異なるものを見つけました:)

したがって、このアプリケーションには次のものがあります。

  • メインフォーム
  • このフォームのツールバーは、アプリケーション設定を設定するための2番目のフォームを開きます
  • この2番目のフォームには、さまざまなテキストボックス/チェックボックス/コンボリスト/ボタンを備えたタブコントロール(2つのタブ)があります。
    • これらはすべて完全に機能します。
  • この2番目のフォームの2番目のタブに、さらに多くのテキストボックスなどとともに、DataGridViewを追加しました。printerListGridと呼ばれます

このフォームのコードビューで、(プリンターの)リストをそれにバインドしようとしています

printerListGrid.DataSource = AppContext.printers.printerList

アプリを実行してフォーム/タブに移動すると、DataGridViewが空白になります。

私も試しました:

    printerListGrid.Columns.Clear()
    printerListGrid.AutoGenerateColumns = True
    printerListGrid.DataSource = AppContext.printers.printerList

繰り返しますが、空白です。

デバッグ中に、printerListに2つprinterのオブジェクトが含まれていることがわかります。プロパティの内容を表示すると、これらがprinterListGridに設定されていることもわかり.DataSourceます。それでも、DataGridViewはまだ空白です。

グリッドを再レンダリングする方法があるはずだと思いますか?

コード開示のために; これはにあるものですList(Of Printer)

    Public Structure Printer
        Public id As Integer
        Public name As String
        Public material As Enums.Materials
        Public outputFolder As String
    End Structure

ヘルプを提供する必要があるコード/説明が他にある場合はお知らせください。

アップデート:

言及するのを忘れました。フォームのLoadイベントで呼び出されるをDataSourceに設定しようとしていますPrivate SubMyBase.Load

更新#2

私はこれを動かし続け、それを機能させようとしています-私はコントロールとその目的を完全に誤解しているかもしれません..とにかく、私は次のことも試しました:

    printerListGrid.AutoGenerateColumns = False

    Dim col As DataGridViewColumn = New DataGridViewTextBoxColumn()
    col.DataPropertyName = "name"
    col.HeaderText = "Name"
    printerListGrid.Columns.Add(col)

    col = New DataGridViewTextBoxColumn()
    col.DataPropertyName = "material"
    col.HeaderText = "Material"
    printerListGrid.Columns.Add(col)

    col = New DataGridViewTextBoxColumn()
    col.DataPropertyName = "outputFolder"
    col.HeaderText = "Output Folder"
    printerListGrid.Columns.Add(col)

    printerListGrid.DataSource = AppContext.printers.printerList

これにより、少なくともグリッドに行が表示されます。List(Of Printer)2のように表示されますが、 ...からのデータは入力されていません。

4

2 に答える 2

4

Found out what I did wrong. Basically try this:

Public Structure Printer
    Property id As Integer
    Property name As String
    Property material As Enums.Materials
    Property outputFolder As String
End Structure
于 2012-11-01T15:20:19.813 に答える
2

バインドされるフィールドは、パブリック変数ではなく、プロパティである必要があります。たとえば、構造を次のように置き換えると、グリッドにIDが表示されます。他の変数も表示するには、同じプロパティ切り替えを行う必要があります。

 Public Structure Printer
        Private _id As Integer
        Public Property id() As Integer
            Get
                Return _id
            End Get
            Set(ByVal value As Integer)
                _id = value
            End Set
        End Property

        Public name As String
        Public material As Materials
        Public outputFolder As String

    End Structure
于 2012-11-01T15:32:19.077 に答える