Usuwanie pozycji z Comboboxa podpiętego pod bazę danych

0

Hej

Tworze taki mały programik. Mam tablicę w sql serwerze, która przechowuje takie dane jak :** id, imie, nazwisko, stanowisko, haslo**.
W jednym miejscu użyłem comboboxa, w którym mamy wyświetlane wartośći wpisane do tej tabeli. Kod wygląda tak :

 con.Open();

            cmd = new SqlCommand("SELECT * FROM Uzytkownicy", con);
            SqlDataAdapter Da = new SqlDataAdapter(cmd);
            DataTable Dt = new DataTable();
            Da.Fill(Dt);

            foreach (DataRow dr in Dt.Rows)
            {
                ListaPracownikow.Items.Add(dr["Imie"].ToString()+" "+dr["Nazwisko"].ToString()+" "+dr["Stanowisko"].ToString());
            }

            con.Close();

Wszystko do tego momentu gra. Teraz chciałbym coś takiego dorobić żeby móc wymazać z bazy zaznaczony element z CBoxa.
O ile wymazanie elementu z comboboxa nie stanowi dla mnie problemu...

 ListaPracownikow.Items.Remove(ListaPracownikow.SelectedItem);

To nie wiem jak to wymazać z bazy danych... ;/

1

Za pomocą SQL:
np: "delete from Uzytkownicy where Imie='{0}' and Nazwisko='{1}' and Stanowisko='{2}'"
Ale lepiej podepnij pod każdy wiersz Id tego rekordu, wtedy usuwanie jest pewniejsze.

0
foreach (DataRow dr in Dt.Rows)
            {
                var item = new ComboBoxItem(dr["Imie"].ToString()+" "+dr["Nazwisko"].ToString()+" "+dr["Stanowisko"].ToString());
                item.Tag = dr["Id"].ToString();
                ListaPracownikow.Items.Add(item);
            }

Usuwanie:"delete from Uzytkownicy where Id="+(ListaPracownikow.SelectedItem as ComboBoxItem).Tag.ToString();

Zaznaczam że jest to pisane na kolanie i może być coś nie tak.

0

dam1an no właśnie trochę krzaczy.

Error 1 The name 'Dt' does not exist in the current context

Error 2 The type or namespace name 'ComboBoxItem' could not be found (are you missing a using directive or an assembly reference?)

0
ivanise napisał(a):

Error 1 The name 'Dt' does not exist in the current context

Nie masz Dt tam, gdzie próbujesz się do tego obiektu odwołać. Pewnie dlatego, że fragment, który wkleiłeś wyżej, jest w ciele jakiejś metody, innej niż ta, z której teraz się przy "delete" do niego odwołujesz.

ivanise napisał(a):

Error 2 The type or namespace name 'ComboBoxItem' could not be found (are you missing a using directive or an assembly reference?)

Przecież @dam1an napisał Ci, że pisze "na czuja", musisz sprawdzić co jest nie tak z tym ComboBoxItem... System.Windows.Controls.ComboBoxItem może albo coś w ten deseń :)

1

Sam nie dojdziesz co jest nie tak?

var item = new ComboBoxItem();
item.Content = dr["Imie"].ToString()+" "+dr["Nazwisko"].ToString()+" "+dr["Stanowisko"].ToString();

Co do pierwszego błędu to nie wiem jak to możliwe jeśli działa Ci twój kod który wkleiłeś.

Chyba że robisz to w WF, wtedy w items nie ma ComboBoxItem tylko object. To możesz sobie taka klasę walnąć:

class ComboBoxItem
    {
        public string Text { get; set; }
        public string Id { get; set; }
        public ComboBoxItem(string text, string id)
        {
            Text = text;
            Id = id;
        }

        public override string ToString()
        {
            return Text;
        }
    }

i później
comboBox1.Items.Add(new ComboBoxItem("jakiś tekst do wyświetlenia", "1"));

0

Czekaj czekaj bo już sie pogubiłem ;/
Pierwszy błąd faktycznie nie dopatrzenie z mojej strony.
Piszę w WindowsFormsAplication. Nie mogę dodać

System.Windows.Controls.ComboBoxItem

1

Więc zrób tak jak pokazałem wyżej, z dodaniem własnej klasy ComboBoxItem.

A później tak się dostajesz do id (ListaPracownikow.SelectedItem as ComboBoxItem).Id

0

Troszkę odświerzę kotleta. Wcześniej jakoś nie miałem czasu żeby do tego zajrzeć. Utworzyłem swoją clase.

class ComboBoxItem
    {
        public string ID { get; set; }
        public string Imie { get; set; }
        public string Nazwisko { get; set; }
        public string Stanowisko { get; set; }
        

        public ComboBoxItem(string id,string imie, string nazwisko, string stanowisko)
        {
            ID = id;
            Imie = imie;
            Nazwisko = nazwisko;
            Stanowisko = stanowisko;
            
        }
        public override string ToString()
        {

            return ID.ToString()+") "+Imie.ToString()+" "+Nazwisko.ToString()+" "+Stanowisko.ToString();
        }

    } 

Zrobiłem wrzucanie danych do ComboBoxa

con.Open();

            cmd = new SqlCommand("SELECT * FROM Uzytkownicy", con);
            SqlDataAdapter Da = new SqlDataAdapter(cmd);
            DataTable Dt = new DataTable();
            Da.Fill(Dt);

            foreach (DataRow dr in Dt.Rows)
            {
                comboBox2.Items.Add(new ComboBoxItem(dr["Id"].ToString(), dr["Imie"].ToString(), dr["Nazwisko"].ToString(), dr["Stanowisko"].ToString() ));
            }

            con.Close(); 

Jeśli chodzi o usuwanie zaznaczonej pozycji w Comboboxie to kod mam taki :

 private void button1_Click(object sender, EventArgs e)
        {
            con.Open();
            cmd = new SqlCommand("DELETE FROM Uzytkownicy WHERE id="+(comboBox2.SelectedItem as ComboBoxItem).ID +"go", con);
            

            con.Close();
        }

Nie wyrzuca żadnych błędów a ni nic. Jednak nie działa. Wiersze nie są usówanie z bazy SQL. :( coś przeoczyłem?

1

Nie wykonałeś zapytania. Brakuje:

cmd.ExecuteNonQuery();
0

O kurde. Faktycznie. Banalny błąd ;/ Dziękuje za szybką pomoc :) już wszystko wiem :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1