wczytywanie przez comboboxa

0

Mam taki problem z comboboxem i jego wczytywaniem. Jest to baza w SQL CE. RZSZERZENIE .SDF. Jak usunę z połowy listy pracowika to mi nie wyświetla pozostalych.(usuwanie działa bo usuwa mi to co zaznacze z bazy danych, problem jest z wczytaniem do comboboxa). Wyczytywanie do comboboxa jest po numerach pracownika. Numery są zapisywanne do 1000 co 10. Czyli 1000,1010,1020,1030,1040 i tak dalej. Jak usunę 1020 to wyświetla 1000,1010 a 1030,1040 już nie !.

 
private void button1_Click_1(object sender, EventArgs e)
     
   {
            string sqla = "DELETE FROM tabela_pracownicy WHERE nr_pracownika = '" + index2 + "'";

            System.Data.SqlServerCe.SqlCeConnection scona = new System.Data.SqlServerCe.SqlCeConnection("Data Source=C:\\Users\\Marek\\Desktop\\BazaDanychSklepu.sdf");

            System.Data.SqlServerCe.SqlCeCommand cmda = new System.Data.SqlServerCe.SqlCeCommand(sqla, scona);

            scona.Open();
            cmda.ExecuteReader();
            scona.Close();

            MessageBox.Show("Pomyślnie usunięto pracownika z bazie danych.", "", MessageBoxButtons.OK, MessageBoxIcon.Information);
            comboBox1.Items.Clear();
            listaPracownikow();

        }



 public void listaPracownikow()
        {

            string licznik2S;

            ds_nr_pracownika = new DataSet();
            string sql9 = "SELECT MAX(nr_pracownika) AS Expr1 FROM tabela_praocwnicy";
            da = new System.Data.SqlServerCe.SqlCeDataAdapter(sql9, con);
            da.Fill(ds_nr_praocwnika, "Pracownik");
            DataRow dRow = ds_nr_praocwnika.Tables["Pracownik"].Rows[0];
            licznik2S = dRow.ItemArray.GetValue(0).ToString();
            licznik2 = Convert.ToInt32(licznik2S);

  	     string legenda = "Imie - Nazw. - Adres. - Telef - Miejsc - rok_urodz. - od_kiedy. - do_kiedy. - stano. - mail.";
           
            comboBox1.Items.Add(legenda);

            for (int i = 1000; i <= licznik2; i += 10) 
            {
                ds_nr_pracownika = new DataSet();
                string sql = "SELECT * FROM tabela_praocwnicy WHERE nr_pracownika = " + i;
                da = new System.Data.SqlServerCe.SqlCeDataAdapter(sql, con);
                da.Fill(ds_nr_pracownika, "Pracownik");

                string jeden, dwa, trzy, cztery, piec, szesc, siedem, osiem, dziewiec, dziesiec, wszystko;

                try
                {
                    DataRow dRow33 = ds_nr_dzialki.Tables["Pracownik"].Rows[0];
                    jeden = dRow33.ItemArray.GetValue(11).ToString();
                    dwa = dRow33.ItemArray.GetValue(1).ToString();
                    trzy = dRow33.ItemArray.GetValue(2).ToString();
                    cztery = dRow33.ItemArray.GetValue(3).ToString();
                    piec = dRow33.ItemArray.GetValue(4).ToString();
                    szesc = dRow33.ItemArray.GetValue(5).ToString();
                    siedem = dRow33.ItemArray.GetValue(6).ToString();
                    osiem = dRow33.ItemArray.GetValue(7).ToString();
                    dziewiec = dRow33.ItemArray.GetValue(8).ToString();
                    dziesiec = dRow33.ItemArray.GetValue(9).ToString();
                }
                catch (Exception)
                {

                    return;
                }

                wszystko = jeden + "  " + dwa + "  " + trzy + "  " + cztery + "  " + piec + "  " + szesc + "  " + siedem + "  " + osiem + "  " + dziewiec + "  " + dziesiec;

                comboBox1.Items.Add(wszystko);
            }
        }

 
0

Trochę to poprawiłem, ale nadal mam problem. To co usunę z comboboxa usuwa się z niego i z bazy danych oraz pozostają pozostałe numery. Ale jest problem że robi się swego rodzaju dziura. Wygląda to tak że np: jak są numery 1000,1001,1002,1003,1004,1005. Jak usunę np 1002 to faktycznie 1003, 1004 i 1005 pozostają, ale jak chce wybrać 1005 to pojawiają się dane z numeru z 1003 lub 1004 a jak wybieram numer 1003 to pojawia się błąd że takiego pracownika nie ma w bazie. To tak jakby pracownicy przesunęli się o tą usuniętą pozycje w dół.

            } 
0

Wyglada na to ze program dzial poprawnie.mjezeli masz pracownikow w bazie i ich numery ida po kolei zgodnie ze wzorcem 1000, 1010, 1020. Jezeli usuniesz pracownika 1020 to pozniej wybierajac rekord o takim numerze pracownika dostaniesz 0 wynikow - select ... where nr_pracownika = 1020. Wtedy w bloku try biorac ...Row [0] dostaniesz wyjatek, przechodzi do bloku catch a tam wychodzisz z funkcji. Czyli nie pobierasz reszty.
Co do drugiego posta, wybieranie jest o jiebo lepsze. Za pomoca jednego zapytania wybierasz wszystko. Nie wiem gdzie dokladnie pojawia sie blad, chyba tej funkcji nie dolaczyles wiec bede troche zgadywal. Jezeli twoja fukcja wybierajaca opiera sie o indeks elemntu to po usnieciu elemntu 1002, numer 1005 jest na pozcji to selected index comboboxa ma wartosc 4. Teraz jezeli twoj select wybiera where nr_pracownika = 1000 + index wtedy dostaniesz pracownika o numerze 1004. Jak wybierzesz trzeci element czyli numer 1003 to index jest 2 a pracownika o 1002 jak opisujesz usnoles.

Pamitaj, usuniecie z bazy danych nie modyfikuje wartosci innych wierszy, w twoim przypadku nie przesuwa wartosci w kolumnie nr_pracownika tab by nie bylo luk w numeracji. Aby uniknac problemu pobieraj wartosc selectedValue z comboboxa.

0

Faktycznie popełniłem błąd. To jest wszytko co mam.

 private void wczytywanie_Click_1(object sender, EventArgs e)// To jest wczytuwanie z comboboxa
        {
            
}

   private void usuwanie_Click_1(object sender, EventArgs e)// Tym przyciskiem usuwam z comboboxa i z bazy pracowników 
        {
         
        }
0

Dziękuje za pomoc :). Zmieniłem całkowicie funkcje wyszukiwanie i dałem coś takiego i działa. Tylko teraz mam dwa problemu.

1.Jak teraz wczytać z bazy danych do poctuerbox zdjęcie?.
2.Jak zrobić w comboboxie taką legęde: żeby pod spodem były wszystkie dane z bazy danych ?

string legenda = "nr_prac. - Imie - Nazw. - Adres. - Telef - Miejsc - rok_urodz. - od_kiedy. - do_kiedy. - stano. - mail."

Tak żeby pod spodem były wszystkie dane z bazy danych ?.


}
0

Co do pierwszego pytania to majac dataReader powinna wystarczyc taka linika

PictureBox.Image = Image.FromStream(dr.GetStream(10))

Zakładając że 10 kolumna którą odczytujesz to blob lub binary data. Ale nie wiem czy SqlLite obsluguje taki typ danych.

Jezeli dobrze rozumiem drugie pytanie to chialbys w coboboxie wyswietlic bardziej zlozony tekst z odczytanych danych. Nie tylko identyfikator pracownika. W takim razie proponuje Ci zapoznac sie z opisem w sekcji Remarks pod addresem http://msdn.microsoft.com/en-us/library/system.windows.forms.combobox.items.aspx
Wtedy definujesz klase o dwóch wlasciwosciach Display (String) oraz Value (int). W funkcji, która uzupełnia wartosci combo boxa dla kazdego wiersza w tablei tworzysz obiekt gdzie do wlasciwosci display wrzucasz tekst z danych odczytanych w bazie a do Value numer pracownika. Dla legendy tez tworzysz obiekt gdzie Display to legenda a Value np. dajesz 0 tak by odróżniać ze to legenda.
Pozostaje odczytanie wartosci. Zamiast uzywac comboBox.Text uzywasz czegos takiego
WorkerItem item = (WorkerItem)comboBox.SelectedItem;

if (item.Value > 0)
{
  // czytasz dane ale doklejasz teras do zapytania " + item.Value + "
}

Sugeruje zebys zaprzyjaznil sie z MSDN znajc typ danych wpisujesz w googla jej nazwe ze slowem .net i dostajesz pomoc. Cesto sa tam przyklady kodu jak czegos uzywac. Somo przegladanie wlasciwosci klasy jest bardzo pouczajace gdyz wiele funkcjonqlnosci mozna napisac na kilka sposobów a dodatkowo mozna odkryc ciekawe funkcje.

0

Dzięki za radę :), na razie zrobiłem coś takiego, ale wystąpił błąd w comboboxie przy wczytywaniu http://zapodaj.net/a11f8d841922c.png.html. Wydaje mi sie że błąd jest w zaznaczeniu głównej danej do wczytywania

to mój cały kod

 public void lista1()//wczytywanie danych z bazy do comboboxa
        {
            
0

O cholera... Weź poczytaj coś na temat pętli for, bo mnie oczy już bolą :P

usunięcie cytowania całego poprzedniego posta - fp

0

Wykombinowałem coś takiego:

     public void lista1()//wczytywanie do comboboxa
        {
          
        }

Wyskakuje mi coś takiego: http://zapodaj.net/73d3755bc1d35.png.html. ComboBoxDM to jest osobny plik o nazwie ComboBoxDM.cs pod spodem załączam jego kod :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;


}

Chciałem poprzez ID wczytywać pozostałe dane z comboboxa do textboxów, a poprzez NAME wyświetlały się te dwie dane z bazy w comboboxie

0

Prawdopodobnie musisz przedefiniowac ComboBoxDM.ToString().

0

Tak jak pisal n0name mozna napisac swoje toString. innym jest konfiguracja comboboxa tak by odczytywal odpowednia wlasciwosc. Proponuje google "combobox .net" i przegladnac wlasciwosci :)

0

dzięki za pomoc :), już sobie poradziłem :)

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