2009-03-13 8 views
1

Ich habe ein benutzerdefiniertes ItemTemplate für mein ListView-Steuerelement erstellt, aber der Elementbefehl wird nicht für die Schaltflächen ausgelöst, die durch die ITemplate generiert werden. Nur wenn Sie auf eine Schaltfläche klicken, verschwinden die Elemente. Nachstehend ist der Code, den ich benutze, ist etwas falsch damit.itemCommand-Ereignis, das in ListView mit benutzerdefinierter ITemplate nicht ausgelöst wird

Der Code für ITemplate

public class FirstItemTemplate: ITemplate {

public void InstantiateIn(System.Web.UI.Control container) 
{ 
    var oTR = new HtmlGenericControl("tr"); 
    var oTD1 = new HtmlGenericControl("td"); 

    Button btnEnter = new Button(); 
    btnEnter.ID = "btnEnter";   
    oTD1.Controls.Add(btnEnter); 
    oTR.Controls.Add(oTD1); 

    var oTD2 = new HtmlGenericControl("td"); 
    Label lblProduct = new Label(); 
    lblProduct.ID = "lblProduct"; 
    oTD2.Controls.Add(lblProduct); 
    oTR.Controls.Add(oTD2); 

    oTR.DataBinding += new EventHandler(oTR_DataBinding); 
    container.Controls.Add(oTR); 

} 

void oTR_DataBinding(object sender, EventArgs e) 
{ 
    var container = (HtmlGenericControl)sender; 
    var dataItem = ((ListViewDataItem)container.NamingContainer).DataItem; 

    PaperObject pro = (PaperObject)dataItem; 

    Button btnEnter = (Button)container.FindControl("btnEnter"); 
    Label lblProduct = (Label)container.FindControl("lblProduct"); 
    btnEnter.Text = pro.PaperId.ToString(); 
    btnEnter.CommandName = "Select"; 
    btnEnter.CommandArgument = pro.PaperId.ToString(); 

    lblProduct.Text = pro.Description; 


} 

}

und die databind:

ListView1.ItemTemplate = new FirstItemTemplate(); ListView1.DataSource = p.SelectPaper(); ListView1.DataBind();

Antwort

0

Ich habe die gleichen Probleme, außer ich bin in einem etwas anderen Szenario. Ich verwende ein Datagrid, um einen Drilldown mit einer Reihe von Abfragen bereitzustellen. Beim ersten Drilldown (Link-Klick) mit dem zweiten Bericht funktioniert es gut, aber beim 2. bis 3. Bericht wird nur die Seite aktualisiert und das Klickereignis wird nicht ausgelöst, aber nach der Aktualisierung der Seite funktioniert das, was bedeutet, dass Benutzer zweimal klicken müssen geh zum 3. Bericht.

Hier ist, was ich habe:

Private Class DrilldownTemplate : Implements ITemplate 
    Private _fieldName As String 

    Sub New(ByVal fieldName As String) 
     _fieldName = fieldName 
    End Sub 

    Sub InstantiateIn(ByVal container As Control) Implements ITemplate.InstantiateIn 
     Dim linkbtn As LinkButton = New LinkButton 
     AddHandler linkbtn.DataBinding, AddressOf BindHyperLinkColumn 
     container.Controls.Add(linkbtn) 
    End Sub 

    Public Sub BindHyperLinkColumn(ByVal sender As Object, ByVal e As EventArgs) 
     Dim linkbtn As LinkButton = CType(sender, LinkButton) 
     Dim container As DataGridItem = CType(linkbtn.NamingContainer, DataGridItem) 

     With linkbtn 
      .CommandName = "Drilldown|" & _fieldName 
      .CommandArgument = Convert.ToString(DataBinder.Eval((CType(container, DataGridItem)).DataItem, _fieldName)) 
      .Text = Convert.ToString(DataBinder.Eval((CType(container, DataGridItem)).DataItem, _fieldName)) 
     End With 
    End Sub 
End Class 
+0

Ich wollte nur eine Auflösung meiner Frage stellen. Ich fügte beide eine ID für die Verbindung hinzu, bevor sie zu dem Container hinzugefügt wurde, d. linkbtn.ID = "lbDrilldown", und auch zu einem dynamisch hinzugefügten div, das das übergeordnete Element des Datagrids war. Stellen Sie sicher, dass Sie jeden Bereich überprüfen, dem Sie dynamisch Steuerelemente hinzufügen, und stellen Sie sicher, dass Sie ihnen eine ID zuweisen, auch wenn Sie keine Ereignisse von ihnen verarbeiten oder versuchen, sie in Ereignissen usw. zu finden. –

Verwandte Themen