Laden...

LINQ to SQL und DataGridView - editieren im Grid bei relationale Abfragen

Erstellt von brainwave vor 10 Jahren Letzter Beitrag vor 10 Jahren 1.167 Views
brainwave Themenstarter:in
436 Beiträge seit 2007
vor 10 Jahren
LINQ to SQL und DataGridView - editieren im Grid bei relationale Abfragen

verwendetes Datenbanksystem: MSSQL

Hallo zusammen,

meine Datenbank besteht aus drei Tabellen. Eine davon ist die Relationstabelle zwischen den beiden
anderen. Also,

tbl_A(id, name)
tbl_B(id, user)
tbl_AB(id, a_id, b_id, text)

So binde die Tabelle tbl_AB direkt ans Grid:


dataGridView1.DataSource = from rel in dc.GetTable<tbl_AB>() select rel;

Das Editieren im GridViw klappt auch wunderbar.
Nun möchte ich im Grid statt "a_id" und "b_id" aus der Tabelle A und B "name" und "user" ausgeben:


dataGridView1.DataSource = (from rel in dc.GetTable<tbl_AB>()
                                           select new {rel.Id, rel.tbl_A.name, rel.tbl_B.user});

Es wird alles korrekt ausgegeben nur kann ich jetzt keine Änderungen mehr im Grid vornehmen.
Kann mir da jemand weiterhelfen?

M
19 Beiträge seit 2012
vor 10 Jahren

Ich würde eine "Join"-Klasse erstellen.


    public class JoinClass
    {
        private TabA a;
        private TabB b;

        public JoinClass(TabA a, TabB b)
        {
            this.a = a;
            this.b = b;
        }

        public string Name
        {
            get
            {
                return a.Name;
            }

            set
            {
                a.Name = value;
            }
        }

        public string User
        {
            get
            {
                return b.User;
            }

            set
            {
                b.User = value;
            }
        }
    }

und dann in der Linq-Query die Objekte erstellen.


dataGridView1.DataSource = (from rel in dc.GetTable<tbl_AB>()
                                           select new JoinClass(rel.tbl_A, rel.tbl_B)).ToList();

brainwave Themenstarter:in
436 Beiträge seit 2007
vor 10 Jahren

und wie funktioniert das Updaten? Sprich "Anonymous types"?

M
19 Beiträge seit 2012
vor 10 Jahren

Ich verstehe dein Problem nicht:*da ist kein "Anonymous Type" *Update / Refresh etc. - gehört eher zu den Grundlagen der Verwendung von LinqToSQL und DataGridView.

Könntest du es ausführlicher beschreiben?!

brainwave Themenstarter:in
436 Beiträge seit 2007
vor 10 Jahren
dataGridView1.DataSource = (from rel in dc.GetTable<tbl_AB>()
                                           select new JoinClass(rel.tbl_A, rel.tbl_B)).ToList();

oder


dataGridView1.DataSource = (from rel in dc.GetTable<tbl_AB>()
                                           select new {rel.Id, rel.tbl_A.name, rel.tbl_B.user});

sobald hier "new" auftaucht wird ein neues "Anonymous types" Objekt erzeugt welches sich
nicht durch das Entity Framework automatisch updaten lässt...und genau hier liegt mein Problem.

M
19 Beiträge seit 2012
vor 10 Jahren

Hast du meine Vorschlag ausprobiert?

Es handelt sich bei der JoinClass nicht um einen "Anonymous types" und durch die Implementierung über die Properties wird die Änderung an die Tabellen weitergegeben.

Edit: Weiterer Lösungsansatz
Datenbankabfrage über 2 Tabellen