2009-04-15 9 views
6

ja zachodzące CurrentMode o FormView do trybu wstawiania stosując metodę ChangeMode w przypadku Page_Load tak:Kontrolą nie zachowując wartości po odświeżenie strony kiedy FormView ustawiony na tryb wstawiania

if(!Page.IsPostBack) 
{ 
    MyFormView.ChangeMode(FormViewMode.Insert); 
} 

ciągu szablon wkładki mojego Formview za I mieć kontrolę DropDownList z jego właściwością AutoPostBack ustawioną na true. Mam również kilka innych formantów DropDownList i TextBox w szablonie wstawiania.

Zawsze, gdy zmieniam wybór DropDownList i odświeżenie strony, tracę wszystkie wartości wprowadzone do elementów sterujących. Dziwne jest to, że jeśli użyję ChangeMode, aby ustawić tryb FormView do wstawienia w dowolnym momencie po początkowym załadowaniu strony, nie mam problemu. Przejrzałem kod za pomocą debuggera i wszystko wydaje się działać prawidłowo, ale jakiś czas po tym, jak mój program obsługi zdarzeń do uruchomienia DropDownList, wszystko wydaje się być resetowane.

Co się tutaj dzieje?

Aktualizacja: Zauważyłem, że mój FormView był wewnątrz znacznika div z runat = "server" i enableviewstate = "false". Po włączeniu stanu wyświetlania dla elementu div kontenera zacząłem widzieć nieco inne zachowanie. FormView nadal nie zachowuje wartości po pierwszym odświeżeniu, ale teraz kolejne posty zwrotne działają poprawnie, a wartości są zachowywane.

Wszelkie pomysły będą mile widziane.

Odpowiedz

0

Spróbuj

MyFormView.EnableViewState = true; 
+0

ViewState jest włączona do kontroli Formview. – joshb

-1

okazję do zmiany trybu na stronie Init lub lub zdarzeń prerender

+0

Próbowałem obu twoich sugestii i bez powodzenia. – joshb

0

Obciążenia ViewState przed pageload i wydaje mi się, że przez zmianę trybu na pageload odtwarza inny zestaw kontrolek, te w twoim EditItemTemplate. Jeśli domyślnie jest ustawiony tryb edycji, a odkomentujesz tę linię w PageLoad, czy zachowa ona wartości? Powinny, jeśli nie przełączasz trybu.

0

FormView.ChangeMode (FormViewMode.Insert)

To musi działać, sprawdź Id i użyć intelisense?

mój przykład jest z formy produkcie Dodaj widzenia ..

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    AddNewItemFormView.ChangeMode(FormViewMode.Insert) 
End Sub 

Spróbuj to zrobić na stronie obciążenia bez „if..then to jest”, jeśli działa to wiesz, że nie jest wyrażenie, ale może treść lub konstrukcja. Pamiętaj, aby identyfikatory kontrolne były znaczące, aby łatwiej było popełnić błędy, gdy trzeba ich użyć lub zadzwonić do nich za pośrednictwem intelisense.

Powodzenia.

:)

2

Ta odpowiedź z innego forum przez Walter Wang [MSFT] - 26 Jan 2007 03:29 GMT

pierwsze, problem wydaje się, że FormView jest opowiedziana przez dane Kontrola źródła, że ​​dane uległy zmianie, a zatem powinna być ponownie powiązać, aby uzyskać nowe dane. Tak naprawdę nie powinno być zrobione , ponieważ wciąż jesteśmy w trybie Insert.Mam obejście celach : Dziedziczenie z FormView stworzyć własną kontrolę FormView, przesłanianie OnDataSourceViewChanged i ustawić RequiresDataBinding do fałszywego czy jesteśmy w trybie Insert:

public class MyFormView : FormView 
    { 
     protected override void OnDataSourceViewChanged(object sender, 
EventArgs e) 
     { 
      if (this.CurrentMode == FormViewMode.Insert) 
      { 
       this.RequiresDataBinding = false; 
      } 
      else 
      { 
       base.OnDataSourceViewChanged(sender, e); 
      } 
     } 
    } 

Przetestowałem to po mojej stronie i wygląda na to, że działa poprawnie. Proszę dać mu próbkę i dać mi znać wynik.

+0

Jeśli to możliwe, umieść link do źródła. – JSuar

+0

To nie zadziałało dla mnie –

0

Mam podobne wydanie stanu wyświetlania, które nie zostało zachowane w szablonie EditItem. Ustawienie EnableViewState = true nie pomaga również.

Co mogę zrobić, to dostać funkcję OnUpdated(), a na samym końcu funkcji,

e.KeepInEditMode = true; 

Nadzieja to pomaga ..

+1

Jeśli masz NOWE pytanie, zadaj je, klikając przycisk [Zadaj pytanie] (http://stackoverflow.com/questions/ask). Jeśli masz wystarczającą reputację, [możesz przejąć] (http://stackoverflow.com/privileges/vote-up) pytanie. Możesz też "gwiazdkę" jako ulubioną i będziesz otrzymywać powiadomienia o nowych odpowiedziach. – Swadq

+0

Tryb KeepInEditMode powoduje, że widok formularza pozostaje w trybie edycji po kliknięciu przycisku z poleceniem Aktualizuj. Nie ma nic wspólnego z zatrzymywaniem danych niezatwierdzonych i nowych danych http://msdn.microsoft.com/pl -us/library/system.web.ui.webcontrols.formviewupdatedeventargs.keepineditmode.aspx "Domyślnie formant FormView powraca do trybu określonego przez właściwość DefaultMode po operacji aktualizacji.Użyj właściwości KeepInEditMode, aby określić, czy formant FormView powinien pozostać w trybie edycji. " –

Powiązane problemy