gubienie wartosci Position w BindingSource

0

mam na formie dgv do tabeli products, po zaznaczeniu jednego produktu i kliknieciu otwiera sie nowa forma a na niej jest ten wybrany produkt jako details, na oko wyglada wszystko dobrze ale gdzies jest blad bo po otwarciu nowego formularza zawsze wyswietla pierwszy z produktow a nie ten wskazany w dgv:

        private void bt_pokazprodukt_Click(object sender, EventArgs e)
        {
            zamow form = new zamow();
            int liczba = form.productsBindingSource.Find("ProductID", productsDataGridView.SelectedCells[3].Value.ToString());
            form.productsBindingSource.Position = liczba;
            
form.show();
        }
0

A czy na pewno productsBindingSource jest źródłem bindowania dla DataGridaView?

0

mam przy pobraniu rekordów z sqlservera i wpisaniu ich do bazy lokalnej zdefiniowane:

productsBindingSource.DataSource = lokalna;
                productsDataGridView.DataSource = productsBindingSource;
0

a jaką wartość ma liczba w czasie debugowania?

0
TomaszSmykowski napisał(a)

a jaką wartość ma liczba w czasie debugowania?

kurcze, rzeczywiście coś jest nie tak, najpierw ma 0 a potem -1

productsDataGridView.SelectedCells[3].Value na pewno pobiera id z dobrej kolumny

0

nikt nie pomoże?

0

przedebuguj krok-po-kroku i obserwuj wartosci:

            zamow form = new zamow();

            int liczba = form.productsBindingSource.Find("ProductID", productsDataGridView.SelectedCells[3].Value.ToString());  /zapamietaj numer

            //przed ta linia sprawdz ile wynosi productsBindingSource.Position 
            form.productsBindingSource.Position = liczba;
            //po niej tez sprawdz czy ustawilo sie na 'liczba'
            
form.show();  //czemu ten show jest z malej? to Twoja metoda czy to jest Form::Show?
           //zaraz po form.show tez srpawdz ile wynosi productsBindingSource.Position 

jesli sie okaze ze pozycja sie 'gubi' przy przejsciu przez show - to blad jest:

  • albo w show - jesli to Twoja jakas metodka
  • albo gdzies ktoras z kontrolek ktore masz na formatce (byc moze nawet grid) powoduje zresetowanie zaznaczenia wierszy w momencie przelaczania sie z visible false na visible true, pewnie w fazie bindowania danych..
  • albo moze Ty masz gdzies jakis handler onCosTam ktory to wlasnie robi?

jelsi chcesz dokladnie dowiedziec sie kiedy indeks ulega zapomnieniu (a szczerze polecam to sprawdzic chocby z ciekawosci), w designerze graficznym podepnij zwyklym dwuklikiem sie pod eventy productsBindingSource::CurrentChanged oraz productsBindingSource::PositionChanged i w wygenerowanych, pustych handlerach postaw breakpointy. pusc program i poczekaj az one sie zlapia - pierwszy raz odpala sie w momencie przechodzenia przez Twoje
form.productsBindingSource.Position = liczba
drugi raz (i nastepne razy, jesli beda) zlapia sie jako popluczyny po tym co Ci zmienilo wartosc position'a. jak sie zlapia -- nic nie rob, tylko obejrzyj po porstu w okienku Debug:CallStack kto śmiał Ci zmienic position.. i jak nie bedizesz wiedzial co z tym zrobic, to zajrzyj tutaj z przygotowanymi callstackami

ps. i nazywaj nastepnym razem tematy sensowniej..

0

przy linijce:
int liczba = form.productsBindingSource.Find("ProductID", productsDataGridView.SelectedCells[3].Value.ToString());

productsBindingSource.Position juz ma wartość -1, co w konsekwencji przekłada się na wartość liczby -1 oraz przypisaniem złej wartości w linijce:
form.productsBindingSource.Position = liczba;

form.Show(); jest z dużej litery, pisałem z palca więc dlatego mój błąd

z tego wynika że błądem będzie opcja:

ktoras z kontrolek ktore masz na formatce (byc moze nawet grid) powoduje zresetowanie zaznaczenia wierszy w momencie przelaczania sie z visible false na visible true, pewnie w fazie bindowania danych

na formatce mam tylko grid txtbox i button, więc jesli już błąd powoduje jakaś kontrolka to tylko gridview

prosze o dalsze rady

0
knefelio napisał(a)

int liczba = form.productsBindingSource.Find("ProductID", productsDataGridView.SelectedCells[3].Value.ToString());

productsBindingSource.Position juz ma wartość -1, co w konsekwencji przekłada się na wartość liczby -1 oraz przypisaniem złej wartości w linijce:
form.productsBindingSource.Position = liczba;

wiesz.. nie dziwie sie ze bs:Position jest tam -1, przeciez dopiero wyszukujesz obiekt i pakujesz jego indeks do zmiennej liczba.. natomiast pozniejsze przypisanie jest z liczba ->do-> bs:position, wiec to co w tym momencie siedzi w position jest w 100% nieistotne.. wazniejsza jest 'liczba'..

...czy to ja miales na mysli i sie walnales w nazwach zmiennych jak pisales posta? jesli tak, no to krotka pilka: -1 dostajesz w 'liczba' bo wyszukiwanie sie nie powiodlo. teraz zostaje myslec - czemu sie nie powiodlo

0

problem jest bardzo dziwny mianowicie dla próby dałem w tej procedurze wyszukanie zwrotne - czyli z otwartego nowo formularza wyszukanie na formę główną:

                    private void bt_pokazprodukt_Click(object sender, EventArgs e)
        {
            zamow form = new zamow();
            int liczba = form.productsBindingSource.Find("ProductID", productsDataGridView.SelectedCells[3].Value.ToString());
            form.productsBindingSource.Position = liczba;
           
if (form.ShowDialog() == DialogResult.OK)
            {
                int nr = productsBindingSource.Find("ProductID", form.productidTextBox1.Text);
                productsBindingSource.Position = nr;
            }
        }

wyszukanie zwrotne działa bez zarzutu, wybrany rekord jest podświetlony na gridzie

mam podobny program do wyszukania ale nie przez grida(to nie on jest tu chyba jednak problemem) i w momencie odpalenia wejscia do procedury BindingSource.Position ma nie -1 ale 0 i potem zmienia sie po wyszukaniu na odpowiednią wartość a tu cały czas jest -1.
Co może powodować że BindingSource.Position jest -1?

co więcej wpisanie na sztywno:
form.productsBindingSource.Position = 10;
nie ustawia na odpowiedni rekord na nowej formie tylko cały czas pierwszy

0

mam wrazenie ze nie czytasz co pisalem..

  • czy form.productsBindingSource.Find zwraca cos roznego od -1? sprawdzales to DOKALDNIE czy tylko patrzales na wynikowe Position?

  • czy PRZED form.productsBindingSource.Find bindingSource.Count wynosi !=0 czy ==0?

---edit---
pogadanka przez gg i sprawa zamknieta, mam nadzieje..
czlowiek mial skopane ladowanie danych. bindingsource byl pusty w momencie wyszukiwania

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