Niejasny błąd w przy kopiowaniu wartości

0

Cześć wszystkim!
Natknąłem się na błąd którego nie potrafię zrozumieć, otóż:

Zadaniem prostej procedury ButtonClick jest skopiowanie wartości z TBWyszukajWnioskodawce (TextBox) do Label7, co według logiki powinno zajść zaraz po kliknięciu na przycisk. Tak się jednak nie dzieje mimo, że parametr text w TBWyszukajWnioskodawce wypełnia się wartością poprzez kliknięcie w tabelę GridView.

Label7.Visible = true;
Label7.Text = TBWyszukajWnioskodawce.Text;

Sama Label7 ma domyślną wartość Label, która jednak znika przy próbie skopiowania zawartości TBWyszukajWnioskodawce.

Co ciekawe tekst w Label7 może być jednak nadany poprzez wpisanie dowolnego ciągu znaku o ile znajdzie się on w nawiasie.

Z czego może wynikać to, że zawartość TBWyszukajWnioskodawce nie jest przekopiowywana do Label7?

1
eninede napisał(a):

Co ciekawe tekst w Label7 może być jednak nadany poprzez wpisanie dowolnego ciągu znaku o ile znajdzie się on w nawiasie.

Nie opisuj kodu, ale go daj.

(na stronie: będzie zabawnie, jak sie dowiemy o co chodzi)

0

Oto kod ButtonCLick:

if (TBPESELDoWyswietlenia.Text.Length == 0)
            {
                Label6.Text = "Proszę wybrać wnioskodawcę.";
            }
            else
            {
               
                string strConnString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data File=D:\Projekty\Baza_danych_projektow.accdb";

                string strQuery = "select * from tabela_wnioskodawcy where NR_PESEL = @PESEL";

                OleDbConnection con = new OleDbConnection(strConnString);
                OleDbCommand cmd = new OleDbCommand();

                cmd.Parameters.Add("@PESEL", OleDbType.VarChar).Value = TBPESELDoWyswietlenia.Text;
                cmd.CommandType = CommandType.Text;
                cmd.CommandText = strQuery;
                cmd.Connection = con;
                OleDbDataReader myreader;

                try
                {
                    con.Open();
                    myreader = cmd.ExecuteReader();
                    myreader.Read();

                    TBImie.Text = myreader["Imie_wnioskodawcy"].ToString();
                    TBNazwisko.Text = myreader["Nazwisko_wnioskodawcy"].ToString();
                    TBPESEL.Text = TBPESELDoWyswietlenia.Text;


                    myreader.Close();
                }
                finally
                {
                    con.Close();
                }
                
                string queryString = "SELECT Posiadane_srodki_pieniezne_w_zl FROM tabela_wnioskodawcy WHERE NR_PESEL = " + TBWyszukajWnioskodawce.Text;

                Label7.Visible = true;
                Label7.Text = queryString;

            }

Próbowałem także zmienić zapis queryString na:

SELECT Posiadane_srodki_pieniezne_w_zl FROM tabela_wnioskodawcy WHERE NR_PESEL = '" + TBWyszukajWnioskodawce.Text + "'";

ale efekt jest ten sam

1
eninede napisał(a):

Oto kod ButtonCLick:

ale efekt jest ten sam

Czyli JAKI, do ciężkiej Anielci ?

tekst w Label7 może być jednak nadany poprzez wpisanie dowolnego ciągu znaku o ile znajdzie się on w nawiasie

A gdzie przykład "o ile znajdzie się on w nawiasie" ? Jak wygląda ten zły kod "bez nawiasu"

0
string queryString = "SELECT Posiadane_srodki_pieniezne_w_zl FROM tabela_wnioskodawcy WHERE NR_PESEL = \""+TBWyszukajWnioskodawce.Text+"\"";
eninede napisał(a) w komentarzu:

Już Cię o to kiedyś prosiłem. Zrobię jeszcze raz. Proszę nie pomagaj mi. Twoja pomoc jest gorsza niż przeszkadzanie.

Noob z zadufaniem rozmiarem ze spore miasto powiedz mi w którym polu masz ten PESEL?

  • cmd.Parameters.Add("@PESEL", OleDbType.VarChar).Value = TBPESELDoWyswietlenia.Text;
  • TBPESEL.Text = TBPESELDoWyswietlenia.Text;
  • ... tabela_wnioskodawcy WHERE NR_PESEL = " + TBWyszukajWnioskodawce.Text;
eninede napisał(a) w komentarzu:

Sam jestem tym klientem. Robię projekt dla siebie, a przy tym się uczę. Skoro czytasz moje posty powinieneś to wiedzieć. —

Wszyscy tu muszą śledzić wątki tego czegoś bo ono tu klientem!!!

1
  1. Ja bym ogólnie to napisał od nowa.
  2. Nadaj odpowiednie nazwy kontrolkom aby wszyscy wiedzieli co się kryje pod tajemniczymi liczbami
  3. Jak sprawdzasz czy długość ciągu jest równa zero nie porównuj do długości bo jak ciąg będzie null to dupa. Użyj IsNullOrEmpty
  4. Wyciąganie danych z bazy opakuj w osobną metodę.
  5. Czy sprawdzałes kod debuggerem?
  6. Jeżeli wykonasz te czynności prawdopodobnie tu nie wrócisz bo wszystko zacznie działać :) Musisz tworzyć taki kod, że jak osoba trzecia w niego spojrzy to bez Twoich wyjaśnień wie o co chodzi. Czasami nie muszę czytać co nie działa u kogoś bo kod jest tak czytelny że błąd widać gołym okiem.

Ale działając już na tym co mamy:

  1. Jaką wartość przybiera label7?
  2. Jaką wartość chcesz uzyskać?
  3. Skoro robisz jakieś zapytanie do bazy danych to nie powinieneś go wywołać?
0
gswidwa1 napisał(a):
  1. Ja bym ogólnie to napisał od nowa.
  2. Nadaj odpowiednie nazwy kontrolkom aby wszyscy wiedzieli co się kryje pod tajemniczymi liczbami
  3. Jak sprawdzasz czy długość ciągu jest równa zero nie porównuj do długości bo jak ciąg będzie null to dupa. Użyj IsNullOrEmpty
  4. Wyciąganie danych z bazy opakuj w osobną metodę.
  5. Czy sprawdzałes kod debuggerem?
  6. Jeżeli wykonasz te czynności prawdopodobnie tu nie wrócisz bo wszystko zacznie działać :) Musisz tworzyć taki kod, że jak osoba trzecia w niego spojrzy to bez Twoich wyjaśnień wie o co chodzi. Czasami nie muszę czytać co nie działa u kogoś bo kod jest tak czytelny że błąd widać gołym okiem.

Ale działając już na tym co mamy:

  1. Jaką wartość przybiera label7?
  2. Jaką wartość chcesz uzyskać?
  3. Skoro robisz jakieś zapytanie do bazy danych to nie powinieneś go wywołać?
  1. Domyślna wartość Label7 to Label.
    Po nadaniu jej jakiejkolwiek wartości tekstowej objętej cudzysłowem - taką wartość przyjmuje np Label7.Text = "To jest tekst w cudzysłowie"; -> "To jest tekst w cudzysłowie"
  2. Chce uzyskać przypisanie do Label7 wartości równej wartości textboxa TBWyszukajWnioskodawce. Przy próbie przypisania jej jednak poprzez Label7.Text = TBWyszukajWnioskodawce.Text - nie wyświetla się nic, mimo, że TBWyszukajWnioskodawce przyjmuje wartość liczbową.
  3. Zapytanie nie jest wywoływane poprzez myreader, a wynik jego przypisania przesłany jest do textboxow: TBImie, TBNazwisko, TBPESEL? Przynajmniej tak to u mnie się wyświetla.

PS. Przypisanie do labelki wartości z TBWyszukajWnioskodawce wynika tylko z chęci sprawdzenia czy dobrze buduje string do zapytania... i otóż nie, gdyż wartość stringa pomija zlepioną część zapytania po za cudzysłowem. (czyli właśnie pomija i nie pokazuje wartości z TBWyszukajWnioskodawce)

1

Nie rozumiem o co Ci chodzi z tym cudzysłowiem, bo Label7.Text = "To jest tekst w cudzysłowie"; - ten ciąg nie jest w cudzysłowie.
Jak chcesz przepisać wartość z jednego tekstboxa do drugiego wypróbuj taki sposób: output.Text = input.Text?.ToString();
Jeżeli to Tobie nie działa może oznaczać, że:

  1. Sam pogubiłeś się we własnych zmiennych i używasz złej kontrolki
  2. Gdzieś w kodzie którego nie widzimy zmieniasz wartość nadpisując swoją właściwą

Z tego co wysłałeś widzę, nie spełniasz swojego pierwszego najprostszego punktu
Zadaniem prostej procedury ButtonClick jest skopiowanie wartości z TBWyszukajWnioskodawce (TextBox) do Label7, co według logiki powinno zajść zaraz po kliknięciu na przycisk

Gdzie niby w zdarzeniu to robisz?

0
gswidwa1 napisał(a):

Nie rozumiem o co Ci chodzi z tym cudzysłowiem, bo Label7.Text = "To jest tekst w cudzysłowie"; - ten ciąg nie jest w cudzysłowie.
Jak chcesz przepisać wartość z jednego tekstboxa do drugiego wypróbuj taki sposób: output.Text = input.Text?.ToString();

Jeśli chcesz przypisać ciąg znaków do etykiety musisz użyć cudzysłowu, tak? No i to działa. (przepraszam jeśli nie posługuje się profesjonalną nomenklaturą). Nie działa tylko jeśli wartością etykiety ma być wartość równa wartości pola tekstowego TBWyszukajWnioskodawce, tak by jeśli np TBWyszukajWnioskodawce.Text = "88888888", a Label7.Text = TBWyszukajWnioskodawce.Text to, żeby wynikiem tego było wyświetlenie się wartości Label7 jako 88888888.

1

dobrze, a daj screena z debuggera jaką wartość ma TBWyszukajWnioskodawce.Text w chwili przypisywania jej do Label7.Text. alternatywnie zrób if(string.IsNullOrEmpty(TBWyszukajWnioskodawce.Text) throw new Exception();

0

Ja ogólnie nie w temacie z C# ale jedna osoba mnie wciągnęła w dyskusję i po krótkim przeczytaniu wątku uważam, że:

  1. Nie wiem jakie masz doświadczenie w programowaniu ALE znajdź w dokumentacji czy zmienna\obiekt TBWyszukajWnioskodawce ma funkcję która zwraca tekst który jest wpisany w tego "textBox-a" - na 100% powinna być taka funkcja
  2. Utwórz sobie jakąś zmienną typu string i przypisz wpisany tekst z textboxa do zmiennej typu string
  3. jak już uda ci się pobrać zawartość z textboxa do zmiennej typu string, to teraz popatrz w dokumentację i zobacz czy Label7 ma funkcję, która przyjmuje argument typu np string i przypisz tam tego stringa

teoretycznie powinno być dobrze ale nie znam mechanizmu odpowiadającego za pobieranie zawartości z kontrolek w C#. Napisałem ogólny schemat postępowania jak to powinno wyglądać i mniej więcej w ten sposób posługuję się w programowaniu w C++/Qt

ogólnie zadaj sobie pytanie czy TBPESELDoWyswietlenia.Text chodzi mi o funkcję Text czy ona coś zwraca ? Jeżeli tak, to w obiekcie Label znajdź funkcję, która przyjmuje argument typu string

1
zkubinski napisał(a):

Ja ogólnie nie w temacie z C# ale jedna osoba mnie wciągnęła w dyskusję i po krótkim przeczytaniu wątku uważam, że:

  1. Nie wiem jakie masz doświadczenie w programowaniu ALE znajdź w dokumentacji czy zmienna\obiekt TBWyszukajWnioskodawce ma funkcję która zwraca tekst który jest wpisany w tego "textBox-a" - na 100% powinna być taka funkcja
  2. Utwórz sobie jakąś zmienną typu string i przypisz wpisany tekst z textboxa do zmiennej typu string
  3. jak już uda ci się pobrać zawartość z textboxa do zmiennej typu string, to teraz popatrz w dokumentację i zobacz czy Label7 ma funkcję, która przyjmuje argument typu np string i przypisz tam tego stringa

teoretycznie powinno być dobrze ale nie znam mechanizmu odpowiadającego za pobieranie zawartości z kontrolek w C#. Napisałem ogólny schemat postępowania jak to powinno wyglądać i mniej więcej w ten sposób posługuję się w programowaniu w C++/Qt

ogólnie zadaj sobie pytanie czy TBPESELDoWyswietlenia.Text chodzi mi o funkcję Text czy ona coś zwraca ? Jeżeli tak, to w obiekcie Label znajdź funkcję, która przyjmuje argument typu string

Jeżeli chcesz pomagać w językach programowania których nie znasz to najpierw usiądź do dokumentacji bo wprowadzasz zamęt wątku
https://docs.microsoft.com/pl-pl/dotnet/api/system.windows.controls.textbox.text?view=windowsdesktop-6.0
https://docs.microsoft.com/pl-pl/dotnet/api/system.web.ui.webcontrols.label.text?view=netframework-4.8
Widzisz? Napisałeś się a można było tego uniknąć.

1

@eninede: tam, gdzie przypisujesz wartość do label7.Text, czyli linijkę przed.

1

@eninede: nie komentuj odpowiedzi tylko twórz odpowiedź.
Ta linijka if(string.IsNullOrEmpty(TBWyszukajWnioskodawce.Text) throw new Exception(); sprawdza czy TBWyszukajWnioskodawce.Text jest równy null lub czy jego długość wynosi 0. Jeżeli tak, to wyrzuca wyjątek. Tobie wyrzuciło wyjątek więc masz odpowiedź.

A gdzie przypisujesz wartość dla TBWyszukajWnioskodawce.text ?

0

Przepraszam. Już daję:

```
        protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
        {
                foreach (GridViewRow row in GridView1.Rows)
                {
                    if (row.RowIndex == GridView1.SelectedIndex)
                    {
                        row.BackColor = ColorTranslator.FromHtml("#A1DCF2");

                        row.ToolTip = string.Empty;

                        TBImieWnioskodawcy.Text = GridView1.SelectedRow.Cells[0].Text;
                        TBNazwiskoWnioskodawcy.Text = GridView1.SelectedRow.Cells[1].Text;
                        TBImieINazwisko.Text = GridView1.SelectedRow.Cells[2].Text;
                        TBPESELDoWyswietlenia.Text = GridView1.SelectedRow.Cells[3].Text;
                    }
                    else
                    {
                        row.BackColor = ColorTranslator.FromHtml("#FFFFFF");
                        row.ToolTip = "Kliknij aby wybrać wiersz.";
                    }
                }
        }
```
2

Okej. Tym kodem na razie zajmować się nie będziemy bo nie ma takiej potrzeby. Wróćmy do tego, gdzie w zdarzeniu ButtonClick ustawiasz wartość dla label7 ? Możesz pokazać kod?

Bo ja widzę tylko to:

string queryString = "SELECT Posiadane_srodki_pieniezne_w_zl FROM tabela_wnioskodawcy WHERE NR_PESEL = " + TBWyszukajWnioskodawce.Text;

Label7.Visible = true;
Label7.Text = queryString;

Nie widzę abyś używał tutaj TBPESELDoWyswietlenia.Text

0
gswidwa1 napisał(a):

Okej. Tym kodem na razie zajmować się nie będziemy bo nie ma takiej potrzeby. Wróćmy do tego, gdzie w zdarzeniu ButtonClick ustawiasz wartość dla label7 ? Możesz pokazać kod?

kodem:

        protected void BTNWyswietlInformacje_Click(object sender, EventArgs e)
        {
            //na wypadek gdyby nie wybrano wnioskodawcy i wcisnieto przycisk
            if (TBPESELDoWyswietlenia.Text.Length == 0)
            {
                Label6.Text = "Proszę wybrać wnioskodawcę.";
            }
            else
            {
                string strConnString = @"Provider=Microsoft.ACE.OLEDB.12.0;DataSource=D:\Projekty\Baza_danych_projektow.accdb";

                string strQuery = "select * from tabela_wnioskodawcy where NR_PESEL = @PESEL";

                OleDbConnection con = new OleDbConnection(strConnString);
                OleDbCommand cmd = new OleDbCommand();

                cmd.Parameters.Add("@PESEL", OleDbType.VarChar).Value = TBPESELDoWyswietlenia.Text;
                cmd.CommandType = CommandType.Text;
                cmd.CommandText = strQuery;
                cmd.Connection = con;
                OleDbDataReader myreader;

                try
                {
                    con.Open();
                    myreader = cmd.ExecuteReader();
                    myreader.Read();

                    TBImie.Text = myreader["Imie_wnioskodawcy"].ToString();
                    TBNazwisko.Text = myreader["Nazwisko_wnioskodawcy"].ToString();
                    TBPESEL.Text = TBPESELDoWyswietlenia.Text;


                    myreader.Close();
                }
                finally
                {
                    con.Close();
                }

                string queryString = "SELECT Posiadane_srodki_pieniezne_w_zl FROM tabela_wnioskodawcy WHERE NR_PESEL = " + TBPESELDoWyswietlenia.Text;

                Label7.Visible = true;

                //if (string.IsNullOrEmpty(TBPESELDoWyswietlenia.Text)) throw new Exception();

                Label7.Text = TBPESELDoWyswietlenia.Text;

            }
        }

a dokładnie ostatnią linijką:

Label7.Text = TBPESELDoWyswietlenia.Text;

2

Rozbijasz wszystko na metody i pracujesz tylko na argumentach które przekażesz. Nie ma wtedy możliwości pomyłki

protected void BTNWyswietlInformacje_Click(object sender, EventArgs e)
{
  string pesel = TBPESELDoWyswietlenia.Text
  var rowData = GetRowDataFromDb(pesel);
  SetData(rowData);
}
private Dictionary<string, string> GetRowDataFromDb(string pesel)
{
  //tutaj wybierz dane z bazy danych
}
private void SetData(Dictionary<string, string> rowDataFromDb)
{
  //tutaj nadpisz właściwości text kontrolek w oparciu o rowDataFromDb
}

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