Comment lier répéteur ItemDataBound, à la mise à jour sur dropdownlist SelectedIndexChanged
Im une recrue de ASP.Net et bloquée depuis ce pendant un certain temps.
Chaque fois que l'index de ma liste déroulante change je veux remplir mon répéteur avec les objets.
Cela fonctionne bien, mais quand im la sélection d'une valeur dans ma liste déroulante qui dosent contenir tous les objets les objets anciens depuis le dernier appel est toujours là, je veux qu'ils disparaissent.
J'ai essayé d'effacer les éléments de la répétition à l'aide de la source de données=null et puis faire un Databind de nouveau, mais qui dosent travail.
Je pense qu'il a avec l'événement ItemDataBound sur mon répéteur.
Le ItemDatabound n'est pas appelé lorsque je sélectionne une valeur dans la dropsdownlist qui dosent contenir tous les objets.
ItemDataBound CODE:
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 CODE:
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();
}
}
}
}
CODE de balisage:
<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>
Code mis à jour comme Demandé(Extrait de DrpdwnLectureName_SelectedIndexChanged)
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.
}
}
Je n'avais pas pensé à ça. Mais qui ne fonctionnent pas non plus. Peut-être que j'ai besoin d'une publication sur "les modifications visibles" ?
u peut montrer votre code mis à jour
La mise à jour extrait de code est présent dans le premier post.
Hm. J'ai essayé de supprimer l'updatepanel. Et maintenant, ses œuvres, mais bien sûr avec les publications. Je veux éviter de ceux-ci. mais alors le code ci-dessus dosent travail.. Et je ne sais pas vraiment pourquoi il dosent travail
OriginalL'auteur J.Olsson | 2013-04-25
Vous devez vous connecter pour publier un commentaire.
Ce n'est pas une solution, mais peut résoudre votre panneau de mise à jour mise à jour de problème. Vous pouvez le contrôle updatepanel mise à jour manuellement le faire:
et quand vous voulez mettre à jour le panneau dans le code, que vous appelez: "UpdatePanel1.Mise à jour()"
OriginalL'auteur Wagner Leonardi