質問

私はユーザーが表示/編集するレポートを選択できるGUIを持っています。ユーザーがレポートを選択すると、レポート内の項目が表示されます。アイテムには多くのプロパティがあります - そのほとんどは正しくバインドされています。プロパティの1つは所有者であり、これはComboBoxColumnにバインドされています。

  • レポート
    • アイテム
      • 所有者

        私はこれに非常に似たものを数回し、DataPropertyNameDataSourceValueMember、およびDisplayMemberを設定したときに問題がありませんでした。唯一の違いは、Itemを持つOwnderIDタイプの代わりに、Ownerオブジェクトのインスタンスを持ちます。

        私は、リストに縛られたアイテムをリストに縛られて、それらがValueMember を設定する目的で自分自身を返すことを可能にする項目を与えることによって、この問題を解決するために提案を見ました

        しかし、このようにバインドすると:

        OwnerColumn.DataPropertyName = "Owner"
        OwnerColumn.DataSource = ownersBindingSource1
        OwnerColumn.ValueMember = "Self"
        OwnerColumn.DisplayMember = "OwnerName"
        
        .

        私は次のようなエラーがたくさんあります:

        Unable to cast object of type 'System.String' to type 'Owner'.
        
        .

        と:

        The following exception occurred in the DataGridView:
        
        System.ArgumentException: DataGridViewComboBoxCell value is not valid.
        
        To replace this default dialog please handle the DataError event.
        
        .

        私はこのようなものとバインドすることによってこれらのエラーのいくつかを回避することができました:

        OwnerColumn.DataPropertyName = "Owner"
        OwnerColumn.DataSource = ownersBindingSource1
        
        . また、ToStringOwner機能を表示させることで、OwnerNameプロパティを表示します。これはかなりハッキーだと思われます - そして私はまだ正しく機能しないので基本的なものを誤解していると思います。あらゆる助けが大いに評価されます。

役に立ちましたか?

解決

私の誤解が私の誤解から多くの誤解が来たことを発見しました。

i refrest of propertiesのいくつかのプロパティで戻り値を指定して、オプションの明示/オプション厳格なしで、私のデザイナーには破損していて、いくつかの列が重複していました。

これへの解決策は、次のとおりです。 "rel=" nofollow "> http://code.google.com/p/systembusinessObjects/source/browse/trunk/system.businessObjects.framework/data / safebindinglists.cs 。残念ながら、これには城の代理が必要で、古いバージョンのNhibernate。

これは私が見つけた単純な解決策です:

問題は、複数の型のオブジェクトを含むリストをバインドできないことです。目標は、ComboBoxが別のオブジェクトとバインドされているオブジェクトのプロパティの値を直接設定できるようにすることです。

ビューオブジェクトを使用し、リストをそのリストにバインドすることを選択しました。

ビューオブジェクト:

Public Class OwnerView
    Private _owner As Owner

    Public ReadOnly Property OwnerId As Integer
        Get
            Return _owner.OwnerId
        End Get
    End Property

    Public ReadOnly Property OwnerName As String
        Get
            Return _owner.OwnerName
        End Get
    End Property

    Public ReadOnly Property OwnerAbbreviation As String
        Get
            Return _owner.OwnerAbbreviation
        End Get
    End Property

    Public Overridable ReadOnly Property Self As Owner
        Get
            Return _owner
        End Get
    End Property

    Public Sub New(ByVal owner As Owner)
        _owner = owner
    End Sub

End Class
.

バインディング:

With OwnerColumn
    .SortMode = DataGridViewColumnSortMode.Automatic
    .ReadOnly = False
    .Name = "OwnerColumn"
    .HeaderText = "Owner"

    Dim bs As New BindingSource()

    For Each co As Owner In Owners
        bs.Add(New OwnerView(co))
    Next

    .DataPropertyName = "Owner"
    .DataSource = bs
    .ValueMember = "Self"
    .DisplayMember = "OwnerName"

    ItemDataGridView.Columns.Add(OwnerColumn)
End With
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top