Entwickler-Ecke
Datenbanken (inkl. ADO.NET) - LINQ2SQL Newbee Datagridwert selektieren
MaTiHeLo - Sa 03.07.10 11:13
Titel: LINQ2SQL Newbee Datagridwert selektieren
Hallo ich habe eine Frage an euch,
ich habe eine Datenbank mit mehreren Tabellen.
Ich habe 2 Store Procedure erstellt.
SQL-Anweisung
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| ALTER PROCEDURE dbo.Spielanlegen (@Kennung varchar(50), @datum_Spiel datetime) AS insert into Spiel (Kennung,Datum_Spiel) Values (@kennung, @datum_Spiel) RETURN
ALTER PROCEDURE dbo.unternehmenanlegen (@Unternehmen_Name varchar(50), @Spiel_ID_Unternehmen int) AS insert into Unternehmen (Unternehmen_Name, Spiel_ID_Unternehmen) Values (@Unternehmen_Name, @Spiel_ID_Unternehmen) RETURN |
Dann habe ich ein einfaches Form mit 2 Datagrids und 2 Textboxen.
Wenn ich nun das Unternehmen anlegen will, soll es so sein das ich im linken datagrid einen angelegtes Spiel selektiere und dort das unternehmen hinzugefügt werden soll.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 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: 57: 58: 59:
| namespace WindowsFormsApplication7 { public partial class Form1 : Form { public Form1() { InitializeComponent(); SpielanlegenDataContext hi = new SpielanlegenDataContext(); var lesen = from c in hi.Spiel orderby c.Spiel_ID select new { c.Kennung, c.Datum_Spiel }; dataGridView1.DataSource = lesen;
}
private void button1_Click(object sender, EventArgs e) { if (textBox1.Text == "") { MessageBox.Show("Bitte geben Sie einen Namen an");
}
else { SpielanlegenDataContext sa = new SpielanlegenDataContext(); sa.StoredProcedure1(textBox1.Text.ToString(), DateTime.Now); var auswertung = from c in sa.Spiel orderby c.Spiel_ID select new { c.Kennung, c.Datum_Spiel }; dataGridView1.DataSource = auswertung; sa.SubmitChanges(); } }
private void button2_Click(object sender, EventArgs e) { if (textBox2.Text == "") { MessageBox.Show("Bitte einen Gruppennamen eingeben"); }
else { SpielanlegenDataContext ga = new SpielanlegenDataContext(); !!!!!!!!!!!!! ga.unternehmenanlegen(textBox2.Text.ToString(), dataGridView1.row var auswertung_unt = from u in sa.Unternehmen orderby c.Unternehmen_ID select new { c.Unternehmen_Name }; dataGridView2.DataSource = auswertung_unt; ga.SubmitChanges(); }
} } } |
Leider bekomme ich das nicht hin ich hänge irgendwie stehe ich auf dem schlauch und das buch Datenbank-Programmierung mit Visual C# hilft mir nicht weiter. Die tabellen sind auch verknüpft. Die tabelle Spiel_spiel_id mit tabelle Unternehmen_spiel_id_unternehmen.
wenn mir einer helfen kann bei dem wetter wäre toll, muss ja auch keine lösung sein vielleicht ein ansatz, das ich weiter komme..
danke
Moderiert von
Kha: SQL-Tags hinzugefügt
Moderiert von
Kha: C#-Tags hinzugefügt
Kha - Sa 03.07.10 18:01
Erst einmal: Wozu überhaupt die SPs? Das macht es dem O/RM nicht wirklich leichter.
Du speicherst bis jetzt eine anonyme Klasse im DGV, an die kommst du nur äußerst umständlich wieder heran. Benutze lieber select c, dann findest du diese Entity in DGV.CurrentRow.DataBoundItem wieder.
MaTiHeLo - Sa 03.07.10 19:13
Kha hat folgendes geschrieben : |
Erst einmal: Wozu überhaupt die SPs? Das macht es dem O/RM nicht wirklich leichter.
Du speicherst bis jetzt eine anonyme Klasse im DGV, an die kommst du nur äußerst umständlich wieder heran. Benutze lieber select c, dann findest du diese Entity in DGV.CurrentRow.DataBoundItem wieder. |
Ersteinmal danke für die nette Hilfe, aber wenn ich ehrlich bin komme ich mit der Antwort nicht wirklich weiter. Vielleicht liegt es auch am Wetter. Naja sind meine ersten versuche in LINQ2SQL und bei youtube schon alle videos angeschaut. ich dachte immer SP sind so das allheilmittel. das problem ist das ich ja nur einen wert aus der ROW brauche also vom Prinzip her den 2 wert der Row und ich bekomme es nicht hin. werde es morgen noch mal mit kühlen kopf versuchen heute hats keinen sinn mehr. aber dir schon mal danke KHA
Kha - Sa 03.07.10 19:38
MaTiHeLo hat folgendes geschrieben : |
ich dachte immer SP sind so das allheilmittel. |
Ja, das war vielleicht vor fünf Jahren der Stand der Dinge. Damals benutzte man aber auch noch keine O/RMs ;) .
MaTiHeLo hat folgendes geschrieben : |
das problem ist das ich ja nur einen wert aus der ROW brauche also vom Prinzip her den 2 wert der Row und ich bekomme es nicht hin. |
Wenn du erst einmal die gesamte "Spiel"-Entity hast, hast du natürlich auch deren ID in der Hand.
MaTiHeLo - Sa 03.07.10 19:54
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 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:
| using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms;
namespace WindowsFormsApplication10 { public partial class Form1 : Form { public Form1() { InitializeComponent(); testconnDataContext tc = new testconnDataContext(); var anzeigen = from spiel in tc.Spiel select spiel; dataGridView1.DataSource = anzeigen; //var anzeigen2 = from u in tc.Unternehmen // where u.Spiel.Spiel_ID ==
}
private void button1_Click(object sender, EventArgs e) { testconnDataContext an = new testconnDataContext(); Spiel sp = new Spiel(); sp.Kennung = textBox1.Text.ToString(); sp.Datum_Spiel = dateTimePicker1.Value; an.Spiel.InsertOnSubmit(sp); an.SubmitChanges(); }
private void button2_Click(object sender, EventArgs e) { testconnDataContext gr = new testconnDataContext(); Unternehmen un = new Unternehmen(); un.Unternehmen_Name = textBox2.Text.ToString(); un.Spiel_ID_Unternehmen = (int)dataGridView1.CurrentRow.DataBoundItem; gr.Unternehmen.InsertOnSubmit(un); gr.SubmitChanges(); } } } |
Da bekomme ich immer einen fehler. Es ist so das ich im DGV das Spiel makieren will. und wenn ich das unternehmen hinzufügen will, dann soll er das zu dem makierten spiel packen.
Kha - Sa 03.07.10 20:09
MaTiHeLo hat folgendes geschrieben : |
Da bekomme ich immer einen fehler. |
Na das sieht doch schon einmal besser aus. Aber was für einen Fehler, vielleicht InvalidCast? Dann sollte er dir genau sagen, auf welche Klasse du
eigentlich casten solltest.
MaTiHeLo - So 04.07.10 13:14
Kha hat folgendes geschrieben : |
MaTiHeLo hat folgendes geschrieben : | Da bekomme ich immer einen fehler. | Na das sieht doch schon einmal besser aus. Aber was für einen Fehler, vielleicht InvalidCast? Dann sollte er dir genau sagen, auf welche Klasse du eigentlich casten solltest. |
ja da hast du recht. aber ich weiß nicht wieso. das muss ein int sein. habe es mal mit der
convert.toint32 versucht aber ging auch nicht. es ist ja so, das die spiel_id_unternehmen und spiel_id beides int sind. oder habe ich nun was falsch verstanden, aber danke schon einmal für die Hilfen und Anregungen.
Ich habe mal ein bild angengehangen. den wert spiel_id 4003 benötige ich. Ich bekomme es nicht hin.
Kha - So 04.07.10 16:04
MaTiHeLo hat folgendes geschrieben : |
ja da hast du recht. |
Außer mit der Annahme, dass InvalidCast den richtigen Typ verraten würde, was du durch deinen Screenshot mittlerweile aber schon nachgeliefert hast :) . Schau ihn dir noch einmal genau an, dort steht der Typ des Wertes von
DataBoundItem, also der Typ, auf den du casten musst.
Kha - So 04.07.10 16:30
MaTiHeLo hat folgendes geschrieben : |
meinst du Spiel? darauf soll ich casten? |
Ja.
Du hast das DGV mit der Entity befüllt, also bekomst du die auch zurück und nicht irgendeine ID, von der das DGV schlecht etwas wissen kann.
Überhaupt solltest du dich bei einem O/RM nicht mehr mit IDs beschäftigen, sobald du die entsprechende Entity hast. Nimm
spiel.Unternehmen.Add(un) oder
un.Spiel = spiel (oder wie auch immer deine genaue Relation aussieht).
MaTiHeLo - So 04.07.10 16:55
Hi Kha
erst einmal danke für die ganze Hilfe aber nun bin ich völlig verwirrt. Also dataGridView1.CurrentRow.DataBoundItem brauche ich gar nicht?
Mir geht es darum das ich im DGV die Spiel_ID selektiere und diese soll dann als int in der Tabelle Unternehmen <- spiel_id_unternehmen gesetzt werden wenn ich eine neue Gruppe hinzufüge.
Die Tabellen sind mit einander verknüpft.
Spiel.Spiel_ID -> Unternehmen.Spiel_ID_Unternehmen
Kha - So 04.07.10 17:34
Du brauchst nach wie vor erst einmal aus DataBoundItem das selektierte Spiel als Instanz, die ich einfach mal spiel getauft habe.
MaTiHeLo - So 04.07.10 18:11
HI kha,
bin zu dumm dafür bekomme schon voll die Krise. Naja egal muss es anders versuchen. ich glaube ich denke zu kompliziert für den mist. aber den für die Hilfe.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!