joh9 Geschrieben 23. Juni 2013 Teilen Geschrieben 23. Juni 2013 (bearbeitet) 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 ... 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 Bearbeitet 23. Juni 2013 von Klotzkopp Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
lbm1305 Geschrieben 23. Juni 2013 Teilen Geschrieben 23. Juni 2013 (bearbeitet) 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 23. Juni 2013 von lbm1305 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
joh9 Geschrieben 23. Juni 2013 Autor Teilen Geschrieben 23. Juni 2013 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
joh9 Geschrieben 23. Juni 2013 Autor Teilen Geschrieben 23. Juni 2013 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"; ] Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
lbm1305 Geschrieben 23. Juni 2013 Teilen Geschrieben 23. Juni 2013 (bearbeitet) 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 23. Juni 2013 von lbm1305 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
joh9 Geschrieben 23. Juni 2013 Autor Teilen Geschrieben 23. Juni 2013 (bearbeitet) 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 23. Juni 2013 von joh9 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
lbm1305 Geschrieben 24. Juni 2013 Teilen Geschrieben 24. Juni 2013 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.