Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   C# "Master-Detail" Databinding von Listbox nach Textbox (https://www.delphipraxis.net/85496-master-detail-databinding-von-listbox-nach-textbox.html)

Phoenix 31. Jan 2007 16:06


"Master-Detail" Databinding von Listbox nach Textb
 
Hi.

Wahrscheinlich ganz Simpel, aber ich häng grad total.

Ich habe eine Listbox. An deren DataSource hängt eine Liste, der DisplayMember ist ein normales String-Property eines Items. Funktioniert einwandfrei.

Nun hat dieses Item noch eine weitere normale String-Eigenschaft: "Content". Dieser Content soll in einer Textbox angezeigt werden, und zwar immer der passende zu dem Item, das in der Listbox selektiert ist.

Was muss ich beim Databinding dieser Textbox eintragen, damit es immer die Content-Eigenschaft des in der Listbox selektierten Items anzeigt?

Ich muss zugeben ich hab mich noch nicht so ganz doll mit dem Databinding auseinandergesetzt, brauch das jetzt aber spontan...

Elvis 31. Jan 2007 17:35

Re: "Master-Detail" Databinding von Listbox nach T
 
Hier mal'n Bleistift:
Delphi-Quellcode:
uses
  System.Collections.Generic,
  System.Windows.Forms;

type
  SampleClass2 = class
  public
    property SomeValue : String;
  end;

  SampleClass1 = class
  public
    property SomeValue : String;
    property Content  : SampleClass2 := new SampleClass2(SomeValue := 'noch nix drin'); readonly;
  end;

   
class method ConsoleApp.Main;
begin
  var myForm := new Form();
 
  myForm.SuspendLayout();
  var lb := new ListBox();
  var tb := new TextBox();
 
  tb.Dock := DockStyle.Top;
  lb.Dock := DockStyle.Fill;
 
  var list := new List<SampleClass1>(3);
  list.Add(new SampleClass1(SomeValue := 'A'));
  list.Add(new SampleClass1(SomeValue := 'B'));
  list.Add(new SampleClass1(SomeValue := 'C'));
 
  lb.DataSource := list;
  lb.DisplayMember := 'SomeValue';
 
  tb.DataBindings.Add('Text', list, 'Content.SomeValue');
 
  myForm.Controls.AddRange([lb, tb]);
 
  myForm.ResumeLayout();
 
  Application.Run(myForm);
end;

Phoenix 31. Jan 2007 19:17

Re: "Master-Detail" Databinding von Listbox nach T
 
Häh?

Also hier meine Liste und die Items:

Code:
public class LabelField : MyBaseItem<LabelFieldList, LabelField>
    {
        String _guid = "";
        String _matno = "";
        String _name = "";
        String _content = "";

        // die anderen props halt ...


        public String Content
        {
            get { return _content; }
            set
            {
                _content = value;
                DoModified("Content");
            }
        }
    }

    public class LabelFieldList : MyBaseList<LabelField, LabelFieldList> // MyBaseList ist eine BindingList
    {
        // Klassen code halt wie initialisierung etc...
    }
Und hier nun auf meinem Form:

Code:
   LabelFieldList fields = new LabelFieldList();
   fields.Init(); // daten holen, hier werden die Items von der DB geladen

   // Liste binden:
   lstFields.DataMember = "Name";
   lstFields.DataSource = fields; // taugt, die Liste zeigt alle Items an

   // und nun die Textbox an den Content-String des in der Listbox selektieren Items binden:
   txtFieldContent.DataBindings.Add("Content", Fields, "Content"); // taugt nicht
Was klappt da ned?

Elvis 31. Jan 2007 19:23

Re: "Master-Detail" Databinding von Listbox nach T
 
Zitat:

Zitat von Phoenix
Was klappt da ned?

Um dir das Erfolgserlebnis nicht zu nehmen: schaue mal in meinen Schnipsel, da wo ich die Datenbindung der TextBox aufsetze.
Der erste Parameter ist die Property an die du den Wert binden willst.
Ich nehme mal an, deine TextBox hat keine Property "Content". ;)

Phoenix 31. Jan 2007 19:27

Re: "Master-Detail" Databinding von Listbox nach T
 
Zitat:

Zitat von Elvis
Der erste Parameter ist die Property an die du den Wert binden willst.
Ich nehme mal an, deine TextBox hat keine Property "Content". ;)

:wall: Ab einer gewissen Uhrzeit ist es einfach nicht mehr gut, zu arbeiten .oO

Elvis 31. Jan 2007 19:55

Re: "Master-Detail" Databinding von Listbox nach T
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Phoenix
Zitat:

Zitat von Elvis
Der erste Parameter ist die Property an die du den Wert binden willst.
Ich nehme mal an, deine TextBox hat keine Property "Content". ;)

:wall: Ab einer gewissen Uhrzeit ist es einfach nicht mehr gut, zu arbeiten .oO

Vor allem musst du das im VS2005 nicht mehr zu Fuss machen.
Gehe mal im Menü auf Data\Show data sources. Klicke auf "add blabla", wähle deine Klasse aus und ziehe den neuen Knoten in den data sources auf deine ListBox. Du kannst jetzt als DisplayMember "Name" auswählen.
Jetzt läst du dir in den data sources die Eigenschaften deiner Klasse anzeigen und du kannst nun "Content" auf die TextBox ziehen.

Damit du verstehst was ich meine, siehe screenie. ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:40 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz