Autor Beitrag
MaTiHeLo
Hält's aus hier
Beiträge: 12

Win 7
C# (VS 2010)
BeitragVerfasst: Sa 03.07.10 11:13 
Hallo ich habe eine Frage an euch,

ich habe eine Datenbank mit mehreren Tabellen.
Ich habe 2 Store Procedure erstellt.

ausblenden 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.


ausblenden volle Höhe 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 user profile iconKha: SQL-Tags hinzugefügt
Moderiert von user profile iconKha: C#-Tags hinzugefügt
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 12

Win 7
C# (VS 2010)
BeitragVerfasst: Sa 03.07.10 19:13 
user profile iconKha hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Sa 03.07.10 19:38 
user profile iconMaTiHeLo hat folgendes geschrieben Zum zitierten Posting springen:
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 ;) .

user profile iconMaTiHeLo hat folgendes geschrieben Zum zitierten Posting springen:
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 Threadstarter
Hält's aus hier
Beiträge: 12

Win 7
C# (VS 2010)
BeitragVerfasst: Sa 03.07.10 19:54 
ausblenden volle Höhe 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Sa 03.07.10 20:09 
user profile iconMaTiHeLo hat folgendes geschrieben Zum zitierten Posting springen:
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.

_________________
>λ=

Für diesen Beitrag haben gedankt: MaTiHeLo
MaTiHeLo Threadstarter
Hält's aus hier
Beiträge: 12

Win 7
C# (VS 2010)
BeitragVerfasst: So 04.07.10 13:14 
user profile iconKha hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconMaTiHeLo hat folgendes geschrieben Zum zitierten Posting springen:
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.
Einloggen, um Attachments anzusehen!
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: So 04.07.10 16:04 
user profile iconMaTiHeLo hat folgendes geschrieben Zum zitierten Posting springen:
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.

_________________
>λ=
MaTiHeLo Threadstarter
Hält's aus hier
Beiträge: 12

Win 7
C# (VS 2010)
BeitragVerfasst: So 04.07.10 16:23 
user profile iconKha hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconMaTiHeLo hat folgendes geschrieben Zum zitierten Posting springen:
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.


meinst du Spiel? darauf soll ich casten? Ich brauche aber doch nur einen Wert aus der Tabelle und zwar _Spiel_ID. Ich habe das gefühle das ich den wald vor lauter bäumen nicht sehe.
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: So 04.07.10 16:30 
user profile iconMaTiHeLo hat folgendes geschrieben Zum zitierten Posting springen:
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 Threadstarter
Hält's aus hier
Beiträge: 12

Win 7
C# (VS 2010)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: 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.

_________________
>λ=

Für diesen Beitrag haben gedankt: MaTiHeLo
MaTiHeLo Threadstarter
Hält's aus hier
Beiträge: 12

Win 7
C# (VS 2010)
BeitragVerfasst: 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.