[C# .NET] Data bind probleem met 2 tabellen

Pagina: 1
Acties:
  • 134 views sinds 30-01-2008
  • Reageer

  • Face_-_LeSS
  • Registratie: September 2004
  • Niet online
Situatie:
Ik heb een form waar ik data op wil weergeven van een 'call' (een melding van een beller).
Ik heb twee tabellen, Calls en Contacts.
Aan een call is een contactpersoon gekoppeld worden. Zie de volgende relatie:

Afbeeldingslocatie: http://files.sildo.net/imagesopwebsites/problem_c%23_relations.jpg

Het form bevat een veld van hey type (typed)DataSet '_callsDataSet' die bevat 2 tables. Calls en Contacts. In de tabel contacts in die dataset zit 1 row, in de tabel Contacts zitten er *.

Wanneer het form geopend wordt, moet die ene Call uit de tabel Calls weergegeven worden. Dat lukt. Moet er in een combobox alle Contacts geladen worden. Lukt ook.
Wanneer die combobox van selectie veranderd, moet er in een textbox het 'Phonenumber' van de geselecteerde contact uit de combobox verschijnen.

Is dat mogelijk met een binding oid? Of moet ik dan gewoon de Text property van de textbox opnieuw binden aan het geselecteerde object in de combobox? Of is er nog een betere oplossing?

Ik heb al veel gezocht enzo, maar databinding snap ik nog niet 100%.

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:54
Hoe doe je het nu ? Toon eens wat relevante code.

https://fgheysels.github.io/


  • Face_-_LeSS
  • Registratie: September 2004
  • Niet online
Dit is een oplossing voor mn probleem maar ik denk dat er misschien wel een makkelijkere/mooiere mogelijkheid is:

C#:
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
public partial class CallForm : Form
    {
        public CallForm(HDSDataSet hdsDataSet)
        {
            if (hdsDataSet == null)
                throw new ArgumentNullException("hdsDataSet");
            
            InitializeComponent();
            LoadDataSet(hdsDataSet);
        }

        private void LoadDataSet(HDSDataSet hdsDataSet)
        {
            if (_hdsDataSet != null)
            {
                _hdsDataSet.Dispose();
            }
            _hdsDataSet = hdsDataSet;

            this.BindingContext[_hdsDataSet, "Contacts"].CurrentChanged += new EventHandler(CallForm_CurrentChanged);

            // Description veld binden
            callDescriptionTextBox.DataBindings.Clear();
            callDescriptionTextBox.DataBindings.Add("Text", this.BindingContext[_hdsDataSet, "Calls"].Current, "Description");

            // contacts laden
            contactsComboBox.DisplayMember = "Contacts.Displayname";
            contactsComboBox.ValueMember = "Contacts.ID";
            contactsComboBox.DataSource = _hdsDataSet;
        }

        void CallForm_CurrentChanged(object sender, EventArgs e)
        {
            contactsPhonenumberTextBox.DataBindings.Clear();
            contactsPhonenumberTextBox.DataBindings.Add("Text", this.BindingContext[_hdsDataSet, "Contacts"].Current, "Phonenumber");
        }

        /* Designer velden:
         * 
         * private TextBox contactsPhonenumberTextBox;
         * private ComboBox contactsComboBox;
         * private TextBox callDescriptionTextBox;
         * private HDSDataSet _hdsDataSet;
         */
    }


Dit staat in mn Main methode:
C#:
1
Application.Run(new CallForm(eenGevuldeHDSDataSet));

Verwijderd

Je kunt toch gewoon de current datakey opvragen van de combo, en daarna met die key de dataset benaderen?

  • Face_-_LeSS
  • Registratie: September 2004
  • Niet online
Ik dacht dat de kracht van databindings onder andere was dat je niet meer op row niveau hoeft te werken, dat je gewoon simpelweg wat relaties tussen kolommen aangeeft en dat de rest voor je gedaan word.

Kan zijn dat ik dat mis heb natuurlijk, maar ik ben benieuwd hoe anderen dit doen. Iemand nog een andere oplossing?

  • 4of9
  • Registratie: Maart 2000
  • Laatst online: 13-12-2024
Als ik je probleem goed begrijp moet je toch echt zelf je OnSelectedIndexChanged oid implementeren om de bijbehorende data van de call te tonen.

wat je dus ook gedaan hebt ;)

[ Voor 10% gewijzigd door 4of9 op 23-04-2007 09:46 ]

Aspirant Got Pappa Lid | De toekomst is niet meer wat het geweest is...

Pagina: 1