Jakich metod użyć?

0

Sprawa wygląda tak: W bazie mam dwie tabele, Pracownik i Charakter w pierwszej tabeli kluczem głównym jest IDpracownika oraz jest klucz obcy IDcharakteru. w tabeli Charakter mam klucz główny IDcharakteru oraz kolumny TYP, CECHA1, CECHA2, CECHA3, CECHA4. Na Formie mam Combobox w którym wysiwetla się 16 pozycji z kolumny TYP każda pozycja jest czteroliterowym wyrażeniem np. ISTJ. IDcharakteru tez ma 16 pozycji od 1 do 16. czyli każdy TYP ma swoje ID do tych dwóch kolumn nie będę już nic dodawał. Jak to ma działać: z Comboboxa wybieram TYP w textboxie pojawia się ID tego typu a ponadto wartośc comboboxa czyli to słowo 4-literowe powinno zostac podzielone na cztery znaki i każdy znak przydzielony do nowej zmiennej. Pod comboboxem pojawią się 4 labele które będą wyswietlać zawartość tych czterech zmiennych a obok nich będzie po textboxie do którego będzie wprowadzało się liczby które wyladują w kolumnach CECHA 1 Cecha2 itd. Czyli np zmienne a=I,a z textboxa wartosc wpisana ląduje do Cecha1,b=S a z textboxa wartosc wpisana ląduje do Cecha2 itd.
Na koncu button Zapisz zapisuje zmiany w bazie czyli Pracownik otrzymuje TYP i jego ID oraz wartości 4 cech składowych. Proszę o pomysł jak to wykonać, jeżeli ktoś łaskaw to o kod jestem totalnie zielony a czas goni, mam za małą wiedzę

0

Może jakoś konkretnie powiedz czego nie wiesz, bo na pewno nikt nie poda Ci gotowego kodu.

jak zapisuje sie do comboboxa - wiesz, jak do labeli, textboxów - też wiesz
jak podzielić ciąg na znaki?

string przyklad = "ala ma kota";
char znak = przyklad[0]; //indeks znaku w ciagu zaczynajac od 0

0

właśnie chodzi jak by wygladać miała metoda pobierająca element z comboboxa i rozdzielenie elementu na 4 części. By pobrać element jakiej właściwości użyć? Acha i jak zrobic by na początku combobox niemiał żadnej wartości korzystam z funkcji DropDownList i jak otwieram forma to jest tam pierwszy element a chce by było czyste pole przed rozwinięciem listy.

1

jest tam pierwszy element

Nie bardzo rozumiem... :/ Combobox jest na początku pusty...

By pobrać element jakiej właściwości użyć?

Chodzi ci o "comboBox1.Items[0];"?

rozdzielenie elementu na 4 części

Może precyzyjniej :P

Masz tutaj przykład dzielenia elementu na 4 części :P

            string s = (string)comboBox1.Items[0];
            if (s.Length < 5) throw new ArgumentException();
            string p1 = s.Substring(0, 1);
            string p2 = s.Substring(1, 2);
            string p3 = s.Substring(2, 3);
            string p4 = s.Substring(3, 4);
0

z tym substring to coś nie tak napisałeś, bo drugi parametr określa ile znaków ma zczytać, a nie odkąd dokąd. lepiej zrobić o tak.

        string p1 = s[0].ToString();
        string p2 = s[1].ToString();
        string p3 = s[2].ToString();
        string p4 = s[3].ToString();

Jeżeli mowa o wyciąganiu tylko jednego znaku z ciągu.
Jeżeli ma być ich więcej wtedy używamy Substring(odkad,ile_znakow)

1

Rzeczywiście, masz rację [soczek] , ale to rozwiązanie i tak jest bez sensu :>
Dlatego wolałbym żeby janowski podał o co mu do... chodzi z tym dzieleniem elementu na 4 części :]

EDIT: z wielkim trudem zrozumiałem chyba wreszcie pierwszy post , i nie rozumiem w czym problem :] Przecież wszystko chyba już jest napisane.
W każdym razie astray miałeś rację, najlepiej to zrobić indeksem jeśli chodzi o jeden znak.

0

Wykonałem to w ten sposób

public void comboBox1_SelectionChangeCommitted(object sender, EventArgs e)
        {
             string zmienna = "";
            zmienna = comboBox1.SelectedValue.ToString();
            char znak1 = zmienna[0];
            char znak2 = zmienna[1];
            char znak3 = zmienna[2];
            char znak4 = zmienna[3];
        }

chodzi o to że jak odpalam forma to w okienku comboboxa jest wyświetlona pierwsza pozycja z listy, a chce by było na dzień dobry puste, dodanie do listy pustego elementu o indexie 0 odpada bo elementy comboboxa pobieram z bazy danych i wymuszałoby to zmiane tam a tego niechce. Czy istnieje jakaś właściwość która ten problem załatwia? I druga sprawa myśle prostsza ale że jestem newbie więc: w formie mam dwie metody jak zrobić by w drugiej metodzie uzyskać dostep do zmiennych z pierwszej metody? całość wyglada tak:

namespace HRM_MBTI
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }
        public void comboBox1_SelectionChangeCommitted(object sender, EventArgs e)
        {
             string zmienna = "";
            zmienna = comboBox1.SelectedValue.ToString();
            char znak1 = zmienna[0];
            char znak2 = zmienna[1];
            char znak3 = zmienna[2];
            char znak4 = zmienna[3];
        }

        public void label1_TextChanged(object sender, EventArgs e)
        {
            label1.Text = znak1;
        }
}
}

no i w drugiej metodzie mam błąd: The name 'znak1' does not exist in the current context

1

http://img22.imageshack.us/img22/645/aaahhs.png
specjalnie dla ciebie zhostowałem obrazek :) Gdzie w tym comboboxie masz jakiś element?

w formie mam dwie metody jak zrobić by w drugiej metodzie uzyskać dostep do zmiennych z pierwszej metody?

Nie da się -.- Chociaz i tak nie rozumiem co ty kombiujesz :D
Zrób tak:

        public void comboBox1_SelectionChangeCommitted(object sender, EventArgs e)
        {
             string zmienna = "";
            zmienna = comboBox1.SelectedValue.ToString();
            label1.Text = zmienna[0];
            label2.Text = zmienna[1];
            label3.Text = zmienna[2];
            label4.Text = zmienna[3];
        }

Dwie uwagi:
1: można zmieniać nazwy komponentów :P label1 i comboBox1 w poważniejszych projektach nie mają racji bytu...

2:

        public void label1_TextChanged(object sender, EventArgs e)
        {
            label1.Text = znak1;
        }

[rotfl]

Rada na przyszłość :> : Prostszym sposobem na stworzenie pętli neskończonej i stackOvarflow byłoby

private void Sth()
{
    Sth();
}
</quote>
0

http://img171.imageshack.us/img171/7623/97205954.jpg
chodzi o to że na liście w combo mam 16 pozycji i jak odpalam forma to pierwsza jest już w okienku a chce by okienko combo było puste przed rozwinięciem listy. No i teraz jak sobie zaznacze jakaś pozycje np. ISTJ to label1.Text ma być I label2.Text S kolejny T i ostatni J (nie patrz na nazwy labeli w screenie pozmieniam je ) Twoje rozwiazanie przy kompilacji wywala błąd ECannot implicitly convert type 'char' to 'string'

0

Twoje rozwiazanie przy kompilacji wywala błąd ECannot implicitly convert type 'char' to 'string'

wystarczy
label1.Text = zmienna[0].ToString();

0

Dzięki teraz działa. A wymysliłeś coś z tym comboboxem by na początku był pusty? może jakieś clear czy coś?

1

Zmartwie cię - nie ma takiej metody, albo ja nic o niej nie słyszałem. I nie wiem po co ci ona 0_o. Jeśli chcesz musisz reagować na zdarzenie DropDown i za każdym razem wypełniać. Tak, wiem, czytane z bazy danych...
Proponuję włożyć wszystko do tablicy typu object[], i na każdy dropdown wywoływać combobox.Clear(); i combobox.AddRange(tablica);. Albo jeszcze lepiej, danie sobie spokoju z całm pomysłem i pozostanie przy pierwszym elemencie :D

0

po prostu dodaj pusty a przy pobieraniu indexu dodaj do niego 1 i po sprawie. Inaczej się nie da.Zrób sobie funkcje pt int PobierzZaznaczonyIndex(){return combobox.selectedIndex--;} i po sprawie.

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