BETA
Aby się zalogować, najpiew wybierz portal.
Aby się zarejestrować, najpiew wybierz portal.
Podaj słowa kluczowe
Słowa kluczowe muszą mieć co najmniej 3 sąsiadujące znaki alfanumeryczne
Pole zawiera niedozwolone znaki
User 92254
User 92254
24 pkt.
Nowicjusz

 
0



Mam taki problem: chce aby podczas GridView1_DataBoud bylo sprawdzane czy label jest pusty czy cos zawiera - od tego ma zalezec jaki zostanie zaladowany obrazek do image2. Kod wydaje sie byc poprawny lecz wystepuje taki blad: "Odwołanie do obiektu nie zostało ustawione na wystąpienie obiektu."Kod poniżej, na czerwono zaznaczylem w jakim miejscu pojawia sie blad.Protected Sub GridView1_DataBound(ByVal sender As Object, ByVal e As System.EventArgs) Handles GridView1.DataBound
   Dim image2 = GridView1.FindControl("Image2")
   Dim Zamow As Button = DirectCast(GridView1.FindControl("Zamow"), Button)
   Dim status As Label = DirectCast(GridView1.FindControl("status"), Label)
   Dim wyp As Label = DirectCast(GridView1.FindControl("wyp"), Label)
      If wyp.Text.Length = 0 Then  //błąd pojawia się w tym miejscu
         If status.Text.Length = 0 Then
               image2.ImageUrl = "~/Grafika/Inne/dostepny.gif"
               Zamow.Visible = True
         Else
         image2.ImageUrl = "~/Grafika/Inne/zamowiony.gif"
         Zamow.Visible = False
         End If
      Else
      image2.ImageUrl = "~/Grafika/Inne/niedostepny.gif"
      Zamow.Visible = False
   End If
End Sub





mdepesz
mdepesz
71 pkt.
Poczatkujacy
 
0


Ustaw breakpointa na tej linijce i sprawdz czy obiekt wyp nie jest rowny nothing. Jesli tak to znaczy, ze to co sie dzieje we wczesniejszej linijce ustawia wyp=nothing.

User 92254
User 92254
24 pkt.
Nowicjusz
 
0


Mozesz opisac dokladniej jak to zrobic? Jestem poczatkujacy i nie zabardzo wiem jak :(Probowalem to samo wykonac na DetailsView na zdarzeniu DataBound czyli tym samym i wszystko chodzi tak jak powinno, problem w tym ze potrzebuje to zrobic na GridView, a na nim wywala blad NullReferenceException. Tak to wyglada jakby na zdarzeniu DataBound jeszcze nie zdarzylo sie nic wczytac do tego labela z bazy tylko nie wiem jak to sprawdzic ;(ps. czemu ten sam blad pojawia sie jesli wpisze tak:
If lblStatus.Text.Length = 0 Then

mdepesz
mdepesz
71 pkt.
Poczatkujacy
 
0


Blad pojawia sie bo pewnie obiekt lblStatus = nothing, a Ty probujesz odwolywac sie do jego wlasciwosciKliknij na pasku marginesu (z lewej strony) obok interesujacej Cie
linijki w programie. Powinno pojawic sie czerwone kolko, a linijka zostanie
zaznaczona czerwonym kolorem. W ten sposob wstawiasz breakpointa - miejsce zatrzymania programu. Inaczej
mozesz to zrobic klikajac na wybranej lini porgramu prawym klawiszem
myszy i z menu kontekstowego wybierasz Breakpoint > Insert
Breakpoint.Jak uruchomisz program w srodowisku w debugu to
wykonywanie programu zatrzyma sie jak dojdzie do linijki z wstawionym
breakpointem.Pozniej naciskasz klawisz F10 (Step over) i
przechodzisz do kolejnej lini. Majac w ten sposob zatrzymany program
mozesz podejrzec stan obiektow w okienku QuickWatch (klikasz prawym
klawiszem myszy na wybranym obiekcie i z menu kontekstowego wybierasz
QuickWatch).W ten sposob mozesz zatrzymywac wykonywanie programu i sprawdzac stan obiektow z danym momencie.Proponuje poczytac w internecie o podstawach debugowaniu programow w visual studio.

User 92254
User 92254
24 pkt.
Nowicjusz
 
0


tak jak pisales wartosc lblStatus jest Nothing. Czyli na jakim zdarzeniu trzeba by bylo ten kod wpisac? Probowalem juz na wszystkich zdarzeniach cos jest nie tak. Ciekawi mnie czemu to samo dziala na DetailsView, a na GridView juz nie dziala.

Aleksander Polak VIP
Aleksander Polak
2207 pkt.
Guru
apl
 
0


Możesz wkleić definicję tego GridView lub chociaż napisać, co w ten sposób chcesz uzyskać? Wydaje mi się, że chcesz ten kod wykonać dla każdego wiersza danych (tj. każdy wiersz posiada przycisk i etykiety), a nie dla całego GridView. W takim przypadku powinieneś obsłużyć zdażenie RowDataBound, a kontrolek nie szukać w GridView, lecz w wierszu (z góry przepraszam za mój łamany VB):




[Kod VB]Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs) _       Handles GridView1.RowDataBound   If e.Row.RowType = DataControlRowType.DataRow Then      ' Szukaj kontrolki w obrębie wiersza.      Dim image2 = e.Row.FindControl("Image2")      ' Imports System.Diagnostics      Debug.Assert(image2 Is Not Nothing, "Local variable image2 is null.")      ...   End IfEnd Sub

User 92254
User 92254
24 pkt.
Nowicjusz
 
0


Dokladnie jak napisales chce to uzyskac dla kazdego wiersza. Jest tam kolumna status i w niej moga znajdowac sie trzy wartosci: Dostępny, Niedostępny, Zamówiony i dla statusu Dostepny button zamow na byc widoczny i odpowiednio dla kazdego statusu odpowiedni gif. Czy moglbys dokladniej opisac jak twoj kod zastosowac?

Aleksander Polak VIP
Aleksander Polak
2207 pkt.
Guru
apl
 
0


Zaznacz GridView, przejdź na zakładkę zdarzeń w oknie Properties, kliknij dwukrotnie zdarzenie RowDataBound, w wygenerowanej metodzie obsługi dodaj If jak w kodzie powyżej (musimy sprawdzić, co właściwie jest bindowane – jeśli wiersz, to kontynuujemy), a w jego ciele wrzuć dowolną logikę, którą chcesz wykonać przy bindowaniu wiersza, np. tę, którą zamieściłeś w pierwszym poście. Zmiany musisz wprowadzić jedynie w odwołaniach do metody FindControl – nie wywołuj jej na GridView (GridView1.FindControl(...)), tylko na obiekcie aktualnie bindowanego wiersza (e.Row.FindControl(...)).

User 92254
User 92254
24 pkt.
Nowicjusz
 
0


Dzieki wielkie :) Pomoglo.Kod po zmianie dzialajacy wyglada tak :)
Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound

If e.Row.RowType = DataControlRowType.DataRow Then

Dim status As Label = DirectCast(e.Row.FindControl("Label9"), Label)
Dim zamow As Button = DirectCast(e.Row.FindControl("Button3"), Button)
If status.Text = "Dostępny" Then

zamow.Visible = True
End If
End If
End Sub

Udziel odpowiedzi

pkt.
Treść wpisu:

Zaloguj się lub Zarejestruj się aby wykonać tę czynność.