Usuwanie pozycji z Comboboxa podpiętego pod bazę danych

Usuwanie pozycji z Comboboxa podpiętego pod bazę danych
ivanise
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 45
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 :

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

Kopiuj
 ListaPracownikow.Items.Remove(ListaPracownikow.SelectedItem);

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

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
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.

dam1an
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 1589
0
Kopiuj
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.

ivanise
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 45
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?)

fourfour
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 627
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ń :)

dam1an
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 1589
1

Sam nie dojdziesz co jest nie tak?

Kopiuj
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ąć:

Kopiuj
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"));

ivanise
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 45
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

dam1an
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 1589
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

ivanise
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 45
0

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

Kopiuj
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

Kopiuj
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 :

Kopiuj
 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?

dam1an
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 1589
1

Nie wykonałeś zapytania. Brakuje:

Kopiuj
cmd.ExecuteNonQuery();
ivanise
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 45
0

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.