2013-04-25 19 views
5

Im çaylak Selectedındexchanged ve bir süre bunun için sıkışmış.ASP.Net üzerinde

Everytime i nesnelerle benim Tekrarlayıcı doldurmak istiyor Benim açılan değişiklikleri dizini.

Bu iyi çalışıyor, ancak benim açılanmda herhangi bir nesne içeren son sayımdaki eski nesnelerin hala var olduğunu gösteren bir değer seçerken, bunların kaybolmasını istiyorum.

Ben Veri kaynağı = null kullanarak yineleyici öğeleri temizlemek çalıştı ve sonra tekrar databind, ama o doz iş ettik.

Sanırım tekrarlayıcımdaki ItemDataBound olayına sahip. Herhangi bir nesne içermesi için, dropdown listesinde bir değer seçtiğimde ItemDatabound çağrılmıyor.

ItemDataBound KODU:

protected void rptStudentQuestion_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
    { 
     Label lblAnswer = e.Item.FindControl("lblAnswer") as Label; 
     TextBox tbxAnswer = e.Item.FindControl("tbxAnswer") as TextBox; 
     Button btnSend = e.Item.FindControl("btnSend") as Button; 
     if (lblAnswer.Text == "" || lblAnswer == null) 
     { 
      lblAnswer.Visible = false; 
      lblAnswer.Enabled = false; 
      tbxAnswer.Visible = true; 
      tbxAnswer.Enabled = true; 
      btnSend.Enabled = true; 
      btnSend.Visible = true; 
     } 
     else 
     { 
      lblAnswer.Visible = true; 
      lblAnswer.Enabled = true; 
      tbxAnswer.Visible = false; 
      tbxAnswer.Enabled = false; 
      btnSend.Enabled = false; 
      btnSend.Visible = false; 

     } 
    } 
} 

OnSelectedIndexChanged KODU:

protected void DrpdwnLectureName_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    string SelectedLecture = DrpdwnLectureName.SelectedValue; 
    string user = Server.HtmlEncode(Context.User.Identity.Name).ToString(); 
    using (var client = new WCFReference.SRSServiceClient()) 
    { 
     var LectureList = client.GetTeacherLecture(user); 
     foreach (var item in LectureList) 
     { 
      if (item.LectureName == DrpdwnLectureName.SelectedValue) 
      { 
       var list = client.GetStudentQuestions(item.LectureID, user); 
       rptStudentQuestion.DataSource = list; 
       rptStudentQuestion.DataBind(); 
      } 
     }    

    } 

} 

Biçimlendirme KODU:

<asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
     <ContentTemplate> 
      <asp:DropDownList ID="DrpdwnLectureName" AutoPostBack="True" runat="server" OnSelectedIndexChanged="DrpdwnLectureName_SelectedIndexChanged"></asp:DropDownList> 
      <asp:Panel ID="PrintPanel" runat="server"> 
       <asp:Label ID="Label1" runat="server" Text="Gör en .pdf på besvarade frågor"></asp:Label> 
       <asp:Button ID="btnDoPdf" runat="server" Text="Button" OnClick="btnDoPdf_Click" /> 
      </asp:Panel> 
      <asp:Repeater ID="rptStudentQuestion" runat="server" OnItemCommand="rptStudentQuestion_ItemCommand" OnItemDataBound="rptStudentQuestion_ItemDataBound"> 
       <ItemTemplate> 
        <asp:Label ID="lblQuestion" runat="server" Text='<%# Eval("StudentQuestionQuestion") %>'></asp:Label> 
        <br /> 
        <asp:TextBox ID="tbxAnswer" runat="server" Visible="false"></asp:TextBox> 
        <asp:Button ID="btnSend" CommandName="SendAnswer" runat="server" Text="Skicka svar" CommandArgument='<%# Eval("StudentQuestionID") %>' /> 
        <br /> 
        <asp:Label ID="lblAnswer" runat="server" Text='<%# Eval("StudentQuestionAnswer") %>' Visible="false"></asp:Label> 
        <br /> 
       </ItemTemplate> 
      </asp:Repeater> 
     </ContentTemplate> 
    </asp:UpdatePanel> 

Bu çözüm değil (DrpdwnLectureName_SelectedIndexChanged dan Pasaj)

if (item.LectureName == DrpdwnLectureName.SelectedValue) 
{ 
    var list = client.GetStudentQuestions(item.LectureID, user); 
    if (list.Count() > 0) 
    { 
     rptStudentQuestion.Visible = true; 
     rptStudentQuestion.DataSource = list; 
     rptStudentQuestion.DataBind(); 
    } 
    else 
    { 
     rptStudentQuestion.Visible = false; // In debug it preforms this, but nothing happens.        
    } 
} 
+0

senin tekrarlayıcı gizlemek açılan listede –

+0

değerini düşünmedim. Ama bu işe yaramıyor. Belki "değişiklikleri görünür kılmak" için bir geri gönderme ihtiyacım var? –

+0

, güncel kodunuzu gösterebilir –

cevap

5

Talep olarak kod güncellendi, ancak sizin güncelleme paneli güncelleme sorunu çözebilir. Bunu manuel yapıyor updatepanel güncelleştirme kontrol edebilirsiniz:

<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="false"> 
     <ContentTemplate> 
      <asp:DropDownList ID="DrpdwnLectureName" AutoPostBack="True" runat="server" OnSelectedIndexChanged="DrpdwnLectureName_SelectedIndexChanged"></asp:DropDownList> 
      <asp:Panel ID="PrintPanel" runat="server"> 
       <asp:Label ID="Label1" runat="server" Text="Gör en .pdf på besvarade frågor"></asp:Label> 
       <asp:Button ID="btnDoPdf" runat="server" Text="Button" OnClick="btnDoPdf_Click" /> 
      </asp:Panel> 
      <asp:Repeater ID="rptStudentQuestion" runat="server" OnItemCommand="rptStudentQuestion_ItemCommand" OnItemDataBound="rptStudentQuestion_ItemDataBound"> 
       <ItemTemplate> 
        <asp:Label ID="lblQuestion" runat="server" Text='<%# Eval("StudentQuestionQuestion") %>'></asp:Label> 
        <br /> 
        <asp:TextBox ID="tbxAnswer" runat="server" Visible="false"></asp:TextBox> 
        <asp:Button ID="btnSend" CommandName="SendAnswer" runat="server" Text="Skicka svar" CommandArgument='<%# Eval("StudentQuestionID") %>' /> 
        <br /> 
        <asp:Label ID="lblAnswer" runat="server" Text='<%# Eval("StudentQuestionAnswer") %>' Visible="false"></asp:Label> 
        <br /> 
       </ItemTemplate> 
      </asp:Repeater> 
     </ContentTemplate> 
     <Triggers> 
      <asp:AsyncPostBackTrigger ControlID="DrpdwnLectureName" /> 
     </Triggers> 
    </asp:UpdatePanel> 

ve kodda paneli güncellemek istediğinizde, aramak: u hayır olduğunda "UpdatePanel1.Update()"

if (item.LectureName == DrpdwnLectureName.SelectedValue) 
{ 
    var list = client.GetStudentQuestions(item.LectureID, user); 
    if (list.Count() > 0) 
    { 
     rptStudentQuestion.Visible = true; 
     rptStudentQuestion.DataSource = list; 
     rptStudentQuestion.DataBind(); 
    } 
    else 
    { 
     rptStudentQuestion.Visible = false; // In debug it preforms this, but nothing happens.  
     UpdatePanel1.Update() //This 'force' updatepanel updating   
    } 
}