Zum Inhalt springen

local database win.phone listbox mit eine 1:x assozi.


joh9

Empfohlene Beiträge

hi ich bitte um eure hilfe mein problem ich hab ne zeichnung hochgeladen und weiß einfach nicht wie ich die 1:x (veranstaltungen : terminen) in verknüpfung mit der Listbox (doppelclick Methode) verknüpfen kann ...

post-90999-14430449609527_thumb.jpg

:)



die Veranstaltungs [event] tabelle

namespace Spielleiter_App_03

{

    [Table]


    public class Tabelle_Veranstaltung

    {

        private EntitySet<Tabelle_Termin> Tabelle_Termin_Ref;


        public Tabelle_Veranstaltung()

        {

            this.Tabelle_Termin_Ref = new EntitySet<Tabelle_Termin>(this.On_Tabelle_Termin_Added, this.On_Tabelle_Termin_Removed);

        }


        private void On_Tabelle_Termin_Added(Tabelle_Termin tabelle_Termin)

        {

            tabelle_Termin.Tabelle_Veranstaltung = this;

        }

        private void On_Tabelle_Termin_Removed(Tabelle_Termin tabelle_Termin)

        {

            tabelle_Termin.Tabelle_Veranstaltung = null;

        }


        [Column(IsPrimaryKey = true, IsDbGenerated = true)]

        public int Id

        {

            get;

            set;

        }

        [Column(CanBeNull = true)]

        public string Extra

        {

            get;

            set;

        }


        [Column(CanBeNull = true)]

        public string Name

        {

            get;

            set;

        }

        [Column(CanBeNull = true)]

        public string Typ

        {

            get;

            set;

        }

        [Association(Name = "Veranstaltung_Termin", Storage = "Tabelle_Termin_Ref", ThisKey = "Id", OtherKey = "veranstaltungID")]

        public EntitySet<Tabelle_Termin> termin

        {

            get

            {

                return this.Tabelle_Termin_Ref;

            }

        }


    }

}

---------------------------------------------

die zu x Termin(date) tabelle

namespace Spielleiter_App_03

{

  [Table]


    public class Tabelle_Termin

    {

        private Nullable<int> VeranstaltungID;

        private EntityRef<Tabelle_Veranstaltung> tabelle_VeranstaltungRef = new EntityRef<Tabelle_Veranstaltung>();


        [Column(IsPrimaryKey = true, IsDbGenerated = true)]

        public int Termin_ID

        {

            get;

            set;

        }


        [Column(CanBeNull = true)]

        public string Ort

        {

            get;

            set;

        }

        [Column(CanBeNull = true)]

        public string Datum

        {

            get;

            set;

        }

        [Column(CanBeNull = true)]

        public string Extra

        {

            get;

            set;

        }

        [Column(CanBeNull = true)]

        public string Uhrzeit

        {

            get;

            set;

        }

        [Column(Storage = "VeranstaltungID", DbType = "Int")]

        public int? veranstaltungID

        {

            get

            {

                return this.VeranstaltungID;

            }

            set

            {

                this.VeranstaltungID = value;

            }

        }

        [Association(Name = "Veranstaltung_Termin", Storage = "tabelle_VeranstaltungRef", ThisKey = "veranstaltungID", OtherKey = "Id", IsForeignKey = true)]

        public Tabelle_Veranstaltung Tabelle_Veranstaltung

        {

            get

            {

                return this.tabelle_VeranstaltungRef.Entity;

            }

            set

            {

                Tabelle_Veranstaltung previousValue = this.tabelle_VeranstaltungRef.Entity;

                if (((previousValue != value) || (this.tabelle_VeranstaltungRef.HasLoadedOrAssignedValue == false)))

                {

                    if ((previousValue != null))

                    {

                        this.tabelle_VeranstaltungRef.Entity = null;

                        previousValue.termin.Remove(this);

                    }

                    this.tabelle_VeranstaltungRef.Entity = value;

                    if ((value != null))

                    {

                        value.termin.Add(this);

                        this.VeranstaltungID = value.Id;

                    }

                    else

                    {

                        this.VeranstaltungID = default(Nullable<int>);

                    }

                }

            }

        }

    }


}

---------------------------

die get klasse

namespace Spielleiter_App_03

{

    public class Hauptklasse : DataContext

    {

        public Hauptklasse(string connectionString) : base(connectionString)

        {

        }

         public Table<Tabelle_Veranstaltung> Veranstaltungen_H

         {

            get

            {

                 return this.GetTable<Tabelle_Veranstaltung>();

            }

        }

         public Table<Tabelle_Termin> Termin_H

         {

             get

             {

                 return this.GetTable<Tabelle_Termin>();

             }

         }

    }

}

-------------------------------------

main

namespace Spielleiter_App_03

{

    public partial class Erstellen_Uebersicht : PhoneApplicationPage

    {


        private const string strConnectionString = @"isostore:/StudentDB.sdf";

        public string a;

        public Erstellen_Uebersicht()

        {

            InitializeComponent();


            using (Hauptklasse Empd = new Hauptklasse(strConnectionString))

            {

                if (!Empd.DatabaseExists())

                {

                    Empd.CreateDatabase();

                }

            }


            using (Hauptklasse Empd = new Hauptklasse(strConnectionString))

            {

                var a = from b in Empd.GetTable<Tabelle_Veranstaltung>() select b.Extra;

                List<Tabelle_Veranstaltung> dataSource = new List<Tabelle_Veranstaltung>();

                foreach (var x in a)

                {


                    dataSource.Add(new Tabelle_Veranstaltung() { Extra = x });


                }

                this.listBox1.ItemsSource = dataSource;

                listBox1.DisplayMemberPath = "Extra";


            }


        }


        private void myButton_Einmalige_Veranstaltung_Erstellen_Click(object sender, RoutedEventArgs e)

        {

            this.NavigationService.Navigate(new Uri("/Erstellen_Button_Einmalige_Veranstaltung.xaml", UriKind.Relative));

        }


        private void button1_Click(object sender, RoutedEventArgs e)

        {

        }

        private void listBox1_Loaded(object sender, System.Windows.RoutedEventArgs e)

        {}


        private void listBox1_Tap(object sender, GestureEventArgs e)

        {

        }


        private void listBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)

        {}


        private void listBox1_DoubleTap(object sender, GestureEventArgs e)

        {


            var listBoxItem = listBox1.ItemContainerGenerator.ContainerFromIndex(listBox1.SelectedIndex) as ListBoxItem;


            NavigationService.Navigate(new Uri(string.Format("/Erstellen_Uebersicht_Auswahl_Einmalige_Veranstaltung.xaml?parameter={0}",listBoxItem.ToString(),"edit"), UriKind.Relative));

        }

    }

}

------------------------------------

die Veranstaltungs erstellen seite

namespace Spielleiter_App_03

{

    public partial class Erstellen_Button_Einmalige_Veranstaltung : PhoneApplicationPage

    {

        private const string strConnectionString = @"isostore:/StudentDB.sdf";


        public Erstellen_Button_Einmalige_Veranstaltung()

        {

            InitializeComponent();


            using (Hauptklasse context = new Hauptklasse(strConnectionString))

            {

                if (!context.DatabaseExists())

                {

                    context.CreateDatabase();

                }

            }

        }


        private void myButton_erstellen_Click(object sender, RoutedEventArgs e)

        {

            using (Hauptklasse Empd = new Hauptklasse(strConnectionString))

            {

                Tabelle_Veranstaltung newVeranstaltung = new Tabelle_Veranstaltung

                {


                    Extra = myTextBox_Name.Text.ToString() + " - " + " einmalige Veranstaltung ",

                    Name = myTextBox_Name.Text.ToString(),


                };         


                Empd.Veranstaltungen_H.InsertOnSubmit(newVeranstaltung);

                Empd.SubmitChanges();

            }


            this.NavigationService.Navigate(new Uri("/Erstellen_Uebersicht.xaml", UriKind.Relative));

        }

    }

}

-------------------------------------------

die seite wenn du in der listbox auf eine Veranstaltung doppel clickst weitergeleitet wirst

namespace Spielleiter_App_03

{

    public partial class Erstellen_Uebersicht_Auswahl_Einmalige_Veranstaltung : PhoneApplicationPage

    {


        private const string strConnectionString = @"isostore:/StudentDB.sdf";


         public Erstellen_Uebersicht_Auswahl_Einmalige_Veranstaltung()

        {

            InitializeComponent();


            using (Hauptklasse Empd = new Hauptklasse(strConnectionString))

            {

                if (!Empd.DatabaseExists())

                {

                    Empd.CreateDatabase();

                }

            }

            using (Hauptklasse Empd = new Hauptklasse(strConnectionString))

            {



                var a = from b in Empd.GetTable<Tabelle_Termin>() select b.Extra;

                List<Tabelle_Termin> dataSource = new List<Tabelle_Termin>();


                foreach (var x in a)

                {


                    dataSource.Add(new Tabelle_Termin() { Extra = x });


                }

                this.myListBox.ItemsSource = dataSource;

                myListBox.DisplayMemberPath = "Extra";

            }

        } 


               private void myButton_Click(object sender, RoutedEventArgs e)

               {

                   this.NavigationService.Navigate(new Uri("/Erstellen_Uebersicht_Auswahl_Button_Termin_hinzu_Einmalige_Veranstaltung.xaml", UriKind.Relative));

               }

        }

}

---------------------------

die zu x Terminen seite

if you want the namespace Spielleiter_App_03

{

    public partial class Erstellen_Uebersicht_Auswahl_Button_Termin_hinzu_Einmalige_Veranstaltung : PhoneApplicationPage

    {


        private const string strConnectionString = @"isostore:/StudentDB.sdf";


        public Erstellen_Uebersicht_Auswahl_Button_Termin_hinzu_Einmalige_Veranstaltung()

        {

            InitializeComponent();

            using (Hauptklasse context = new Hauptklasse(strConnectionString))

            {

                if (!context.DatabaseExists())

                {

                    context.CreateDatabase();

                }

            }



        }


        private void myButton_Erstellen_Click(object sender, RoutedEventArgs e)

        {

            using (Hauptklasse Empd = new Hauptklasse(strConnectionString))

            {

                Tabelle_Termin newTermin = new Tabelle_Termin

            {   Extra = mytextBox_Ort.Text.ToString() + " " + mytextBox_Datum.Text.ToString() + " " + mytextBox_Uhrzeit.Text.ToString(),

                Ort = mytextBox_Ort.Text.ToString(),

                Datum = mytextBox_Datum.Text.ToString(),

                Uhrzeit = mytextBox_Uhrzeit.Text.ToString(),

            };

                Empd.Termin_H.InsertOnSubmit(newTermin);

                Empd.SubmitChanges();

            this.NavigationService.Navigate(new Uri("/Erstellen_Uebersicht_Auswahl_Einmalige_Veranstaltung.xaml", UriKind.Relative));

            }

            }

    }

}

ich danke euch für eure hilfe

post-90999-14430449592154_thumb.jpg

Bearbeitet von Klotzkopp
Link zu diesem Kommentar
Auf anderen Seiten teilen

1) hast du eine Liste vom Typ "Veranstaltung". Diese wurde an ListBox1 gebunden

2) auf den Doppelklick-Event für ListBox1 muss Du die eben ausgewählte Entität ermitteln.

3.) falls Du diese gefunden hast, liest Du alle Termine aus und bindest diese Collection an die zweite ListBox.

Ansonsten das Problem bitte genauer erklären.

Bearbeitet von lbm1305
Link zu diesem Kommentar
Auf anderen Seiten teilen

:) ich bin absoluter neuling ... ich hoffe, ich kann dass überhaupt hinbekommen ....

zu 1) ich meine ich habe eine klasse Veranstaltung, das objekt welches ich erzeuge binde gebe ich in der ListBox1 aus !?

zu 2) eröffnen ich eine Aktion ?

[ private void listBox1_DoubleTap(object sender, GestureEventArgs e){}]

3) wie lese ich denn aus einer Local Database alle Termine aus und vor allem wie gebe ich diese in der zweiten ListBox aus

danke ibm

grüße

Link zu diesem Kommentar
Auf anderen Seiten teilen

hab jetzt mal bisschen probiert leider ohne erfolg ...

[

var a = from b in Empd.GetTable<Tabelle_Termin>() join c in Empd.GetTable<Tabelle_Veranstaltung>() on b.veranstaltungID equals c.Id select b.Extra;

List<Tabelle_Termin> dataSource = new List<Tabelle_Termin>();

foreach (var x in a)

{

dataSource.Add(new Tabelle_Termin() { Extra = x });

}

this.myListBox.ItemsSource = dataSource;

myListBox.DisplayMemberPath = "Extra";

]

Link zu diesem Kommentar
Auf anderen Seiten teilen

Code-Tag bitte auch wieder schließen. code.../code -> mit eckigen Klammern drum.

Neuling in was? Und dann gleich ne Windowsd Phone Anwendung?

Was soll den bei der Anwendung oder genauer gesagt bei Deinem derzeitigen Problem passieren?

Du schreibst, dass Du eine 1:n Beziehung mit 2 Listeboxen (siehe Grafik) abbilden möchtest= Plötzlich tauscht Code auf, wo etwas hinzugefügz wird.

Die ListBox wird doch sicherlich mehr als eine Veranstaltung anzeigen, oder? Also hast Du schon mal eine Liste von Veranstaltungen. Jede einzelnen Veranstaltung enthält eine Collection von Terminen.

Bei Auswahl einer Veranstaltung, wird ein Event gefeuert, welches Du auswerten musst. Dabei sagt Dir die Instanz von ListBiox auch, welches Element Du ausgewählt hast. Damit hast Du die Veranstaltung. Und wenn Du diese dann bestimmt hast, lässt Du die Termine in der anderen Box anzeigen.


// Peusdocode


public void DoubleKlickEventHandlerMethode(object sender, EventArgs e)

{

    var selectedItem = lstBox.SelectedItems[0] as Veranstaltung;


    // wenn null, mache was


    // ansonsten

    lstBox2.ItemsSource = selectedItem.Termine.ToList();

}

Bearbeitet von lbm1305
Link zu diesem Kommentar
Auf anderen Seiten teilen

ich danke dir, in meiner app auf page 1 soll eine listbox mit von mir selber angelegten Veranstaltungen aufgelistet werden, wenn ich auf den button weiter unten klicke und auf page 3 weitergeleitet werde kann ich dort noch weiter Veranstaltung hinzufügen. komme ich nun wieder zu page 1 und doppel clicke auf eine dieser erstellten Veranstaltung, soll ich auf page 2 weitergeleitet werden und dort erscheinen in der listbox Termine. Ich kann nun noch Termine hinzufügen, wenn ich auf den Button weiter unten klicke und auf page 4 weiter geleitet werde und dort den ort zeit und datum bestimme. nun soll wenn ich wieder zu page 1 gehe und auf eine andere Veranstaltung in der listbox mit doppelclick clicke die dazugehörigen termine angezeigt werde usw.

was du geschrieben hast habe ich verstanden nur habe ich bei deinem Beispiel ja 2 listboxen auf einer Page, und wenn ich eine Veranstaltungsname angetippt habe wie selektiere ich die nur dazugehörigen Termine

[code

private void listBox1_DoubleTap(object sender, GestureEventArgs e)

{

var selectedItem = lstBox.selctedItems[0] as veranstaltung // ich selektiere aus der listbox und erstelle eine liste veranstaltung ?

if ( eine veranstaltung angeklickt wurde)

{

dann gebe mir die termine dazu aus... wie hole ich mir nur diese speziellen termin aus der local database

}

else

lstBox2.itemssource = selcteditem.termin.tolist(); // zeige mir nix an ??

}

/code]

hmmm

Bearbeitet von joh9
Link zu diesem Kommentar
Auf anderen Seiten teilen

was du geschrieben hast habe ich verstanden nur habe ich bei deinem Beispiel ja 2 listboxen auf einer Page, und wenn ich eine Veranstaltungsname angetippt habe wie selektiere ich die nur dazugehörigen Termine


private void listBox1_DoubleTap(object sender, GestureEventArgs e)

{

     var selectedItem = lstBox.selctedItems[0] as veranstaltung // ich selektiere aus der listbox und erstelle eine liste veranstaltung ?

// Ich gehe davon aus, dass man in der ListBox für die Veranstaltungen nur eine und nicht mehrfache Veranstaltungen auswählen kann. Die ListBox hat als DataSource / ItemsSource eine Collection / List vom Typ Veranstaltung (Tabelle_Veranstaltung). Also ist eine Auswahl eine "Veranstaltung". Aus den SelectedItems ist eine Liste der ausgewählten Veranstaltungen. Auch wenn nur eine selektiert wurde. [0] ist der Index für das erste Element der Collection. Da dies vom Typ Object ist, muss es noch nach Veranstaltung gecastet werden

if ( eine veranstaltung angeklickt wurde)

{

 dann gebe mir die termine dazu aus... wie hole ich mir nur diese speziellen termin aus der local database

}

Hier sollte überprüft werden, ob der Cast erfolgreich war => if (selectedItem != null)

dann gebe mir die termine dazu aus... wie hole ich mir nur diese speziellen termin aus der local database

Die Veranstaltung, wenn diese denn nicht NULL ist, sollte dann eine Collection vom Typ Termin mitführen. Eventuell mal beim Debuggen schauen, ob das SelectedItem diese Collection vorweist. Ansonsten einen Call gegen die Lokale DB absetzen und dir Termine Abfrage.

// Pseudocode

var query = context.Termine.Where(x => x.Veranstaltung == selectedItem) // oder wie auch immer die Instant benannt ist.

Wichtig wäre, dass das gecastet Objekt vom Typ Veranstaltung an die nächste Seite / Page übergeben wird, vielleicht per Konstruktor.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...