In einem Benutzersteuerelement habe ich einen Repeater innerhalb eines UpdatePanels (das innerhalb eines ModalPopupExtender angezeigt wird. Der Repeater ist datengebunden mit einer Arrayliste von MyDTO-Objekten. Für jedes Element in der Liste gibt es zwei Schaltflächen. Beim Binden werden die ImageURL und das CommandArgument festgelegt.
Dieser Code funktioniert beim ersten Mal gut, aber das CommandArgument ist danach falsch. Es scheint, als ob die Anzeige korrekt aktualisiert wird, aber das DTO nicht und das gesendete CommandArgument ist das, das gerade entfernt wurde.
Kann jemand Probleme im Code erkennen?
Bearbeiten: Ich habe gerade einen CollapsiblePanelExtender zum Code hinzugefügt. Wenn ich jetzt ein Element lösche und das Panel erweitere, ist das zuvor gelöschte Element (und aus der Anzeige verschwunden) zurückgekehrt. Es scheint, dass der Repeater unter der Haube nicht korrekt neu aufgebaut wurde.
ASCX
Name
<%#((MyDTO)Container.DataItem).Name%>
Beschreibung :
<%#((MyDTO)Container.DataItem).Description%>
Suchtext :
<%#((MyDTO)Container.DataItem).Text%>
Code-Behind
public DeleteData DeleteDataDelegate;
public RetrieveData PopulateDataDelegate;
public delegate ArrayList RetrieveData();
public delegate void DeleteData(String sData);
protected void Page_Load(object sender, EventArgs e)
{
//laden der initialen Daten..
if (!Page.IsPostBack)
{
if (PopulateDataDelegate != null)
{
this.DataRepeater.DataSource = this.PopulateDataDelegate();
this.DataRepeater.DataBind();
}
}
}
protected void DataRepeater_ItemCommand(object source, RepeaterCommandEventArgs e)
{
if (e.CommandName == "Delete")
{
if (DeleteDataDelegate != null)
{
DeleteDataDelegate((String)e.CommandArgument);
BindDataToRepeater();
}
}
else if (e.CommandName == "Run")
{
String sRunning = (String)e.CommandArgument;
this.ViewDataModalPopupExtender.Hide();
}
}
protected void DataRepeater_ItemDataBound(object source, RepeaterItemEventArgs e)
{
RepeaterItem item = e.Item;
if (item != null && item.DataItem != null)
{
MyDTO oQuery = (MyDTO)item.DataItem;
ImageButton oDeleteControl = (ImageButton) item.FindControl("DeleteData");
ImageButton oRunControl = (ImageButton)item.FindControl("RunData");
if (oDeleteControl != null && oRunControl !=null)
{
oRunControl.ImageUrl = "button_expand.gif";
oRunControl.CommandArgument = "MyID";
if (oQuery !=null)
{
//etwas tun
}
oDeleteControl.ImageUrl = "btn_remove.gif";
oDeleteControl.CommandArgument = "MyID";
}
}
}
public void BindDataToRepeater()
{
this.DataRepeater.DataSource = this.PopulateDataDelegate();
this.DataRepeater.DataBind();
}
public void ShowModal(object sender, EventArgs e)
{
BindDataToRepeater();
this.ViewDataModalPopupExtender.Show();
}