locked
Problem binding data from a child entity object of joined/normalized table (object) in my entity model RRS feed

  • Question

  • I am having a problem binding data from a child entity object of a joined/normalized table (object) in my entity model. If I want to display a grand child column rows, I get only a first item.

    Alternatively, I can get a list of rows of my normalized-joined objects.

     

    I have following table structure CASE- parent, MEM_CASE – child, MEM- grandchild table.

    CASE as a parent table has one-to-many relationship to MEM_CASE table; MEM_CASE table has many-to-one relationship to MEM table.

    CASE table has following properties related to these tables:

    Scalar: CASEID

    Navigation: MEM_CASE

    MEM_CASE table has following properties:

    Scalar: MEM_CASEID

    Navigation:       MEM table

                            CASE table

    MEM table has following props:

    Scalar: MEMID

                fullname

    Navigation: MEM_CASE

     

    I want to have a list of fullname column in either listbox or combo box, but I can only get the first item (first selected item).  I can also get a list of MEM_CASE objects, but not the list of fullname columns. I can have multiple fullname rows as a result.

    Following bindings does not work:

    Me.ListBox1.DataBindings.Add(New System.Windows.Forms.Binding("SelectedValue", Me.MEM_CASEBindingSource, "MEM.fullname", True))

    Nor:

    Me.ListBox1.DataBindings.Add(New System.Windows.Forms.Binding("SelectedValue", Me CASEBindingSource., "MEM_CASE.MEM.fullname", True))

    Nor, following from code behind:

    Me.ListBox1.DataSource = CType(CType(Me.BindingContext(CASEBindingSource, "MEM_CASE"), BindingManagerBase), CurrencyManager).List

    Me.ListBox1.DisplayMember = "MEM.fullname"

     

    Other than my workaround down, is there any way of reaching properties of a child object from normalized - joined tables in relationship many to many?

    I have a workaround where I create a new list of object type myproxy.MEM, then I loop through the list of items of MEM_CASE objects which are of type MEM object, and add items to my new list. Now I have a new list of type MEM instead of list of MEM_CASE and I am able to bind to this new list. The code looks like:

      

            Dim memList As New List(Of MyDataServiceProxy.MEM)

            For i = 0 To CASEBindingSource.GetRelatedCurrencyManager("MEM_CASE").List.Count - 1

                'fill new MEM list from MEM_CASE:           
                 memList.Add(
    CType(CASEBindingSource.GetRelatedCurrencyManager("MEM_CASE").List(i), MyWebDataServiceProxy.MEM_CASE).MEM)

            Next

            'bind new list to our control to display a column/property of MEM object:

            Me.ListBox1.DataSource = memList

            Me.ListBox1.DisplayMember = "fullname"

     

    Thursday, October 8, 2009 5:56 PM