2010-05-13 20 views
8

Veri yolu kılavuzlu basit bir ASP sayfam var (bir nesne kaynağına bağlı). Izgara bir sihirbazın sayfası içinde yer alır ve her satır için bir 'seç' onay kutusuna sahiptir. Sihirbazın bir aşamadaGridView, geri göndermeler arasındaki durumu hatırlamıyor

, ben GridView bağlamak:

protected void Wizard1_NextButtonClick(object sender, WizardNavigationEventArgs e) 
    { 
... 
     // Bind and display matches 
     GridViewMatches.EnableViewState = true; 
     GridViewMatches.DataSource = getEmailRecipients(); 
     GridViewMatches.DataBind(); 

Ve bitiş butonuna tıklandığında, ben satırları arasında yineleme ve seçilenlere kontrol edin:

protected void Wizard1_FinishButtonClick(object sender, WizardNavigationEventArgs e) 
{ 
    // Set the selected values, depending on the checkboxes on the grid. 
    foreach (GridViewRow gr in GridViewMatches.Rows) 
    { 
     Int32 personID = Convert.ToInt32(gr.Cells[0].Text); 
     CheckBox selected = (CheckBox) gr.Cells[1].FindControl("CheckBoxSelectedToSend"); 

Ama en bu aşama GridViewMatches.Rows.Count = 0! Izgarayı yeniden bağlamadım, ihtiyacım olmamalı, değil mi? Görüşün devleti korumasını beklerim. (Ayrıca, kılavuzu yeniden yönlendirirsem, seçim onay kutuları temizlenir)

NB: Bu sayfa ayrıca kullanıcı denetimlerini OnInit yönteminde dinamik olarak ekler. Ben görüş durumu ile karışıklık olabilir duydum, ama bunu söyleyebilirim, doğru olarak yapıyorum ve bu eklenen kontroller için görünüm gibi görünüyor görünüyor (değerler geri göndermeler arasında devam ediyor)

Çok teşekkürler herhangi bir yardım için avans!

Ryan

GÜNCELLEME: Bu programlama veri kaynağı kuruyorum gerçeği ile olabilir mi? Asp motoru, sayfa yaşam döngüsü sırasında ızgarayı henüz tanımlanmamış bir veri kaynağına bağlayıp bağlamadığını merak ettim. (Bir test sayfasında, GridView 'otomatik' databound'dur. Kılavuzun yeniden bağlanmasını istemiyorum Sadece önceki yayındaki görünümden değerleri istiyorum!

Ayrıca, asp başlığı: viewStateEncryptionMode = "Hiçbir zaman" - şöyle bu arada bir 'geçersiz Görünüm durumu MAC doğrulaması' mesajı Başvuru için

çözmek için, benim GridView tanımlanır:

<asp:GridView ID="GridViewMatches" runat="server" AllowSorting="True" AutoGenerateColumns="False" 
    BackColor="White" BorderColor="#E7E7FF" BorderStyle="None" BorderWidth="1px" CellPadding="3" 
    OnDataBinding="GridViewMatches_OnBinding"> 
     <Columns> 
      <asp:BoundField DataField="PersonID"><ItemStyle CssClass="hidden"/></asp:BoundField> 
      <asp:TemplateField> 
       <ItemTemplate> 
        <asp:CheckBox ID="CheckBoxSelectedToSend" runat="server" 
         Checked='<%# DataBinder.Eval(Container.DataItem, "SelectedToSend") %>'/> 
       </ItemTemplate> 
... 

cevap

9

PreInit olayındaki denetimleri yinelemek ('başka bir denetim ekle' veya 'başka bir denetim kaldır' düğmesinin basılıp basılmadığını algılamak için) görünüm durumunu geçersiz kılar !!İşte

PreInit

public Control GetPostBackControl(Page thePage) 
    { 
     //return null; 

     Control myControl = null; 
     string ctrlName = thePage.Request.Params.Get("__EVENTTARGET"); 
     if (((ctrlName != null) & (ctrlName != string.Empty))) 
     { 
      myControl = thePage.Master.FindControl(ctrlName); 
     } 
     else 
     { 
      foreach (string Item in thePage.Request.Form) 
      { 
       Control c = thePage.Master.FindControl(Item); 
       if (((c) is System.Web.UI.WebControls.Button)) 
       { 
        myControl = c; 
       } 
      } 

     } 

     return myControl; 
    } 

(ben web üzerinde bulunan bu Metod için kredi almak)

ilk satırı uncommented ise çağrılan yöntemdir, Görünüm durumu korunur.

Korkunç!

+2

numaralı soruya ekledim. Teşekkür ederim. Teşekkür ederim. Bin kere, teşekkürler. Bana bir sürü baş ağrısını kurtardın. Bu arada, aynı sorun Page_Init'ten de geliyor. – jwd

2

emin olun sizin GridViewViewState üzerindedir Varsayılan olarak

GridView'un geri tepmediğini veya temizlenmediğini doğrulayın.

Eğer hala çalışmıyorsa, GridView numaralı telefonun üstündeki kontrollerden herhangi birini kontrol edin ve ViewState numaralı telefonun kapalı OLMADIĞINDAN emin olun. ViewState kapalı olan tüm ebeveyn denetimleri, tüm çocuk denetimlerinin ViewState kullanmamasına neden olur.

Bu dinamik denetimlerden birinde GridView ürününüz bulunmadığı sürece dinamik kontrollerin GridView üzerinde herhangi bir etkisi olmamalıdır.

+0

Merhaba, cevabınız için çok teşekkürler. GridView def'i Viewstate: EnableViewState = "True" öğesini etkinleştirmek için değiştirdim ve ızgarayı yalnızca bir yerde (sihirbazın 'sonraki' olayı) bağladığım kontrol ettim. Hala çalışmıyor! Viewstate, aynı sayfadaki diğer denetimler için iyidir (sihirbazın diğer adımlarında). Bu beni deli ediyor! – Ryan

1

Kılavuz görünümünüzün ve diğer denetimlerin kimlikleri var mı? Bir kimlik belirtmezseniz veya kimlik geri gönderimler arasında değişirse, görüntüleme değişikliklerini kaybedersiniz.

+0

Harika bir fikir! Ama ne yazık ki bir kimliği var. GridView'imin tanımını – Ryan