Infragistics Ultragrid Master/Detail



  • Hallo zusammen,

    ich komme bei einem Problem gerade nicht weiter und hoffe ihr könnt weiter helfen.

    An die Ultragrid binde ich per BindingSource drei Tabellen, die eine Relation haben.

    **Tabelle1 -(relation1)-> Tabelle2 -(relation2)-> Tabelle3
    relation1 = 1:n
    relation2 = 1:n
    **

    Im Ultragrid werden die einzelnen Informationen richtig verknüpft und auch hierarchisch dargestellt.

    Jetzt möchte ich einzelne Felder in einem extra Dialog bearbeiten und da komme ich nicht weiter....
    Der Dialog zeigt immer auf die erste Zeile der Tabelle3 was nicht -immer- gewünscht ist.

    dsTab2_Buch_Tab3 = WebService.LoadByID( connStr, kID );
    
    DataTable dsBuchTable = new DataTable( "Buch" );
    dsBuchTable.Columns.Add( "Buch", typeof( string ) );
    dsBuchTable.PrimaryKey = new DataColumn[] {dsBuchTable.Columns["Buch"] };
    dsTab2_Buch_Tab3.Tables.Add( dsBuchTable );
    
    //--------------
    var groupedByBuch = from temp1 in dsTab2_Buch_Tab3.Tab2.AsEnumerable()
    					group temp1 by temp1.Field<string>( "Buch" ) into g
    					select new
    					{
    						Buch = g.Key,
    					};
    
    foreach (var element in groupedByBuch)
    {
    	var row = dsBuchTable.NewRow();
    	row["Buch"] = element.Buch;
    	dsBuchTable.Rows.Add( row );
    }
    
    //Relation erstellen
    var parentColsBuch = new DataColumn[1];
    parentColsBuch[0] = dsTab2_Buch_Tab3.Tables["Buch"].Columns["Buch"];
    
    var childColsTab2 = new DataColumn[1];
    childColsTab2[0] = dsTab2_Buch_Tab3.Tab2.Columns["Buch"];
    
    var parentCols = new DataColumn[2];
    parentCols[0] = dsTab2_Buch_Tab3.Tab2.Columns["KID"];
    parentCols[1] = dsTab2_Buch_Tab3.Tab2.Columns["AID"];
    
    var childCols = new DataColumn[2];
    childCols[0] = dsTab2_Buch_Tab3.Tab3.Columns["KID"];
    childCols[1] = dsTab2_Buch_Tab3.Tab3.Columns["AID"];
    
    dsTab2_Buch_Tab3.Relations.Add( "relBuchTab2", parentColsBuch, childColsTab2 );
    dsTab2_Buch_Tab3.Relations.Add( "relTab2Tab3", parentCols, childCols );
    
    //Bindingsource erstellen
    BindingSource_Abnahmestelle = new BindingSource( dsTab2_Buch_Tab3, "" );
    

    Das Binden eines Feldes an eine Textbox im Dialog:

    Binding bindingTest = new Binding( "Text", BindingSource_Test, "Tab3.Feld1" );
    
    txtBox.DataBindings.Clear();
    txtBox.DataBindings.Add( bindingTest );
    

    Versucht habe ich bereits den Filter bei der BindingSource zusetzen aber ohne erfolg:

    BindingSource_Test.Filter = String.Format( "KID = {0} AND AID = {1} AND Buch = '{2}'", KID, AID, Buch );
    


  • OK nun funktioniert es. Habe dafür eine 2. BindingSource (Detail) erstellt welche die Master BindingSource entgegennimmt und ein Filter einsetzt.

    BindingSource bsDetail = new BindingSource( BindingSource_Test, "Tab2" );
    bsDetail.Filter = String.Format( "KID = {0} AND AID = {1} AND Buch = '{3}'", KID, AID, Buch );
    
    Binding bindingTest = new Binding( "Text", bsDetail, "relTab2Tab3.Feld1" );
    
    txtBox.DataBindings.Clear();
    txtBox.DataBindings.Add( bindingTest );
    

Log in to reply