• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

C# - combobox mnożenie się obiektów listy

Object Storage Arubacloud
+1 głos
185 wizyt
pytanie zadane 2 maja 2021 w C# przez Mich4l Nowicjusz (160 p.)
edycja 2 maja 2021 przez Mich4l

Witam, potrzebuje pomocy. Czy ktoś jest w stanie odpowiedzieć mi na pytanie, dlaczego z początkowej listy obiektów (4 -elementy) w combobox'ie po wciśnięciu przycisku dodaj, wszystkie te 4 elementy się mnożną i tak w kółko ? Oczywiście wszystko ładnie dodaje się do datagridview jednak w kolekcji combobox itemy się duplikują :/

 

Kod:

            Pracownik p1 = new pracownik();
            p1.Imię_Nazwisko = "Jan Kowalski";
            p1.Stawka = 20.0m;
            Mechanik.Mechanicy.Add(p1);

            comboBox_pracownicy.Items.Clear();
            foreach (Pracownik m in Pracownik.Pracownicy)
            {
    
                comboBox_pracownicy.Items.Add(p1);
            }
            foreach (Pracownik prac in Pracownik.pracownicy)

            {
                dataGridView1.Rows.Add(prac.pracownicy);
            }

 

1 odpowiedź

0 głosów
odpowiedź 3 maja 2021 przez VBService Ekspert (253,340 p.)

"Czeski" błąd  wink

Iterujesz w pętli foreach

foreach (Pracownik m in Pracownik.Pracownicy)
{ 
    comboBox_pracownicy.Items.Add(p1);
}

więc chyba chodzi Tobie o ...

foreach (Pracownik m in Pracownik.Pracownicy)
{ 
    comboBox_pracownicy.Items.Add(m);
}

 

komentarz 4 maja 2021 przez Mich4l Nowicjusz (160 p.)
Niestety  dalej to samo :/ Po dodaniu wartości z combobox do datagridview wszystkie elementy z combobox się mnożą :/
komentarz 4 maja 2021 przez VBService Ekspert (253,340 p.)
Musisz udostępnić więcej kodu, bo z tego co pokazałeś, ciężko jest coś więcej wywnioskować.
komentarz 4 maja 2021 przez Mich4l Nowicjusz (160 p.)

@VBService, Mam 2 formatki. 

1. Tutaj mam tabelkę oraz jeden przycisk, którym wywołuje formatkę nr 2. I dodaje wartości z formatki 2 do tabelki.

        private void button1_Click(object sender, EventArgs e)
        {
            Form2 formularz_dodaj = new Form2();
            formularz_dodaj.ShowDialog();

            dataGridView1.Rows.Clear();
            foreach (Pracownik prac in Pracownik.Pracownicy)

            {
                dataGridView1.Rows.Add(prac);
            }
        }

2.  Tutaj zadeklarowałem Imię i nazwisko pracownika którego chce wybrac z listy combobox i dodać go do tabelki z pierwszej formatki. Wszystko się dodaje jednak, gdy  z powrotem chce dodać kolejnego pracownika, lista w combobox zwiększa się o +1 ( Zamiast jednego Jan Kowalski pojawia się 2 itd. za każdym dodaniem do tabelki)

        private void Form2_Load(object sender, EventArgs e)
        {
            Pracownik p1 = new Pracownik();
            p1.Imię_Nazwisko = "Jan Kowalski";
            Pracownik.Pracownicy.Add(p1);

            comboBox_pracownik.Items.Clear();
            foreach (Pracownik m in Pracownik.Pracownicy)
            {

                comboBox_pracownik.Items.Add(m);
            }
        }

oraz utworzyłem klase o nazwie Pracownik:

    class Pracownik
    {
        public string Imię_Nazwisko;
        static public List<Pracownik> Pracownicy = new List<Pracownik>();


        public override string ToString()
        {//popraw już coś istniejącego
            return Imię_Nazwisko;
        }
    }

 

komentarz 4 maja 2021 przez Mich4l Nowicjusz (160 p.)
edycja 4 maja 2021 przez Mich4l

@VBService, Wydaje mi się, że udało mi się naprawić ten problem. Mianowicie w formatce 2 w pętli foreach dodałem: "comboBox_pracownik.Items.Clear();" tuż przed comboBox_pracownik.Items.Add. Jednak gdy mój combobox ma więcej elementów to już nie działa.

komentarz 5 maja 2021 przez VBService Ekspert (253,340 p.)

Dlaczego w Form2_Load na "sztywno" dodajesz Jan Kowalski?

w ten sposób za każdym odwołaniem się do Form2 - zawsze "uruchomiane" jest zdarzenie Load i za każdym razem dodawany jest kolejny Kowalski do listy, więc czyszczenie combox-a nie daje zamierzonego przez Ciebie efektu.

komentarz 5 maja 2021 przez Mich4l Nowicjusz (160 p.)

Czyli jak chce to wrzucić na sztywno to powinienem to wrzucić np. tutaj?

        public Form1()
        {
            InitializeComponent();
        }

 

komentarz 5 maja 2021 przez VBService Ekspert (253,340 p.)
edycja 5 maja 2021 przez VBService

Moim zdaniem trzeba by było dopisać kod, który sprawdza czy na liście jest już dodany Kowalski i go nie dodawać jak już jest, albo dodać jak go jeszcze nie ma np.:

        private void Form1_Load(object sender, EventArgs e)
        {
            Pracownik p1 = new Pracownik();
            p1.Imię_Nazwisko = "Jan Kowalski";

            if (!Pracownik.Pracownicy.Contains(p1))
            {
                Pracownik.Pracownicy.Add(p1);
            }

            comboBox_pracownik.Items.Clear();
            foreach (Pracownik m in Pracownik.Pracownicy)
            {

                comboBox_pracownik.Items.Add(m);
            }
        }

 

Podobne pytania

0 głosów
1 odpowiedź 263 wizyt
pytanie zadane 17 lutego 2023 w C# przez MarekPrzywarek Nowicjusz (220 p.)
0 głosów
0 odpowiedzi 416 wizyt
pytanie zadane 19 maja 2021 w C# przez disaster Bywalec (2,120 p.)
0 głosów
1 odpowiedź 188 wizyt
pytanie zadane 27 stycznia 2020 w C# przez Kamilos1906 Nowicjusz (240 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...