C# WPF Adatbázis mező törlése

C# WPF Adatbázis mező törlése
2014-04-15T22:01:55+02:00
2014-05-14T10:18:18+02:00
2022-12-01T01:50:42+01:00
anonymus0402
Sziasztok! Adott egy adatbázis, amiből törölni szeretnék rekordokat, egy megadott feltétel alapján. A Törlést nem hajtja végre.

Először kilistázom egy listBox-ba a tábla elemeit ->
private void btKeres_Click(object sender, RoutedEventArgs e)
        {
                DBManager dbManager = (Application.Current as App).DBManager;
                lbEredmeny.ItemsSource = dbManager.Dolgozoadatok();
                lbEredmeny.DisplayMemberPath = "Vezeteknev_d";
        }
Majd a listBox-ban kijelölt elemnek, megfelelő sort töröli szeretném
        private void btTores_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                string query = "delete from Dolgozo where Vezeteknev_d='" + this.lbEredmeny.SelectedItems + "'";
                MessageBox.Show("Törölve");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
Mutasd a teljes hozzászólást!
Feltöltöm a ListBox-ot az autó adataival:

lbEredmeny.ItemsSource = dbManager.autoadat(); lbEredmeny.DisplayMemberPath = "Tipus";
A törlés gombra kattintva a kiválasztott autót megkeresi az adatbázisba rendszám alapjá(kulcs) és törli
private void btTores_Click(object sender, RoutedEventArgs e) { try { var selected = (lbEredmeny.SelectedValue as Auto); Auto selectedCar = context.Auto.SingleOrDefault(a => a.Rendszam == selected.Rendszam); context.Auto.Remove(selected); context.SaveChanges(); MessageBox.Show("Törölve"); } catch (Exception ex) { MessageBox.Show(ex.Message); } }
Mutasd a teljes hozzászólást!

  • Nem vagyok otthon a WPF-ben, de azért ez mégis mi?

    -Létrehozol egy queryt, amit nem futtatsz le.
    -A querynek adsz egy olyan paramétert, hogy "this.lbEredmeny.SelectedItems", ennek le se kéne fordulnia. A SelectedItems-ben, Itemeknek kell lennie, object típussal.
    -Milyen típusú az a dbManager.Dolgozoadatok()? Mi van abban a függvényben?

    Ez így eléggé káosz, honnan van ez a kód?
    Mutasd a teljes hozzászólást!
  • Ezért kellene segítség, mert én is kezdő vagyok a WPF-ben és nem sikerül megcsinálni és nem tudom, hogy kell lefuttatni a lekérdezést.


    -Milyen típusú az a dbManager.Dolgozoadatok()? Mi van abban a függvényben?

     public List<OsszesDolgozoAdat> Dolgozoadatok()
            {
                var query = from h in context.Dolgozo
                            select new OsszesDolgozoAdat()
                            {
                                Vezeteknev_d = h.Vezeteknev_d,
                                Keresztnev_d = h.Keresztnev_d,
                                szemig_d = h.szemig_d,
                                cim_d = h.cim_d,
                                adoszam_d = h.adoszam_d,
                                telefon_d = h.telefon_d,
                                beosztas_d = h.beosztas_d,
                                jog = h.jog,
                                dolgozoadatok = h.Vezeteknev_d + " " + h.Keresztnev_d + " " + h.cim_d
                            };
                return query.ToList();
            }

    /*******/

     public class OsszesDolgozoAdat
        {
            public string Vezeteknev_d { get; set; }
            public string Keresztnev_d { get; set; }
            public string szemig_d { get; set; }
            public string cim_d { get; set; }
            public string adoszam_d { get; set; }
            public string telefon_d { get; set; }
            public string beosztas_d { get; set; }
            public string jog { get; set; }

            public string dolgozoadatok { get; set; }
        }
    Mutasd a teljes hozzászólást!
  • Nem szeretnélek megbántani, de egy tutoriallal illene kezdeni, mert ez a bemásolt részlet arról árulkodik, hogy nem sokszor készítettél adatbázis kezelést C#-ban.

    0.
    Az OsszesDolgozoAdat-ban mi az egyedi azonosító? Illene egyet létrehozni, legyen ID a példában.

    1.
    Van egy ListBox, amiben vannak itemek, amik OsszesDolgozoAdat típusúak, ebből kellene kinyerni a tartalmat. Erre kell egy foreach, meg egy list. Valami ilyesmit hozz össze:

    List<OsszesDolgozoAdat> idk = new List<OsszesDolgozoAdat>; foreach(object oda in lbEredmeny.SelectedItems) { idk.Add((OsszesDolgozoAdat)oda).ID); }


    2.
    Megvannak az ID-k már csak törölni kell. Ehhez töltsük be a contextet és szedjük ki belőle az idkkel az adatokat, majd töltsük fel az adatbázisba.

    Létrehozod a contextet, ahogy a DBManager-ben példányosítod. Ez a rész nem biztos, hogy helyes, de logikailag így kell kinéznie:

    DbContext context = new DbContext(); foreach(int i in idk) { context.Dolgozo.Local.Remove(context.Dolgozo.SingleOrDefault(o => o.ID == i)); } context.SaveChanges();



    A kódokat nem szerkesztőben írtam, lehetnek hibásak, inkább csak gondolat ébresztők! Tényleg ajánlom, hogy kicsit nézz körbe pár tutoriallal!

    Jó munkát!
    Mutasd a teljes hozzászólást!
  • foreach(object oda in lbEredmeny.SelectedItems)

    Megjegyezném, hogy WPF alatt nem nagyon célszerű ilyen módon függőséget létrehozni a kód és az UI között. A WPF egyik nagy előnye, hogy szépen le lehet választani a kódot az UI-ról (tehát úgy, hogy semmilyen UI-controlra nem történik a kódban referencia, minden dinamikus adatkötéssel történik).

    Ha érdekel, nézd meg ezt a példát, amihez ebben a topicban fűztem némi magyarázatot.

    Ugyancsak ajánlott Dante kolléga WPF tutorial-ját végignézni az elejétől.
    Mutasd a teljes hozzászólást!
  • Szia! Egy egyszerű adatbázis kezelő programot kell készítenem. Kezdő vagyok a wpf-ben és még egyenlőre az adatkötést nem tanultuk, csak annyi kellene, hogy ebbe az esetbe, ha működő lenne a kód, akkor, hogy kel lefuttatni egy lekérdezést?
    Mutasd a teljes hozzászólást!
  • Az adatbázis kezelés független az UI-tól (jó esetben).

    Ha teljesen kezdő vagy adatbázis-kezelés területén is, kezdd az alapoktól, pl. itt egy jó ADO.NET tutorial.
    Mutasd a teljes hozzászólást!
  • Hozott anyagból ez sikerült:P
    Köszi az észrevételt!
    Mutasd a teljes hozzászólást!
  • Feltöltöm a ListBox-ot az autó adataival:

    lbEredmeny.ItemsSource = dbManager.autoadat(); lbEredmeny.DisplayMemberPath = "Tipus";
    A törlés gombra kattintva a kiválasztott autót megkeresi az adatbázisba rendszám alapjá(kulcs) és törli
    private void btTores_Click(object sender, RoutedEventArgs e) { try { var selected = (lbEredmeny.SelectedValue as Auto); Auto selectedCar = context.Auto.SingleOrDefault(a => a.Rendszam == selected.Rendszam); context.Auto.Remove(selected); context.SaveChanges(); MessageBox.Show("Törölve"); } catch (Exception ex) { MessageBox.Show(ex.Message); } }
    Mutasd a teljes hozzászólást!
  • Miután kaptál egy halom releváns linket, sikerült csaknem a lehető leggányabb módon implementálnod a megoldást.

    Fogadd gratulációm: úgy tűnik, nem nagyon kell aggódnom, hogy a fiatalabb generáció elveszi a munkám.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd