itemCommand事件未在ListView中使用自定义ITemplate触发

时间:2009-03-13 15:46:50

标签: .net itemplate

我为listView控件创建了一个自定义itemtemplate,但是没有为通过ITemplate生成的按钮触发item命令。仅限于此,当您单击任何按钮时,项目将消失。以下是我正在使用的代码,它有问题。

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;


}

}

和数据绑定:

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

1 个答案:

答案 0 :(得分:0)

我遇到同样的麻烦,除非我的情况略有不同。我正在使用数据网格使用一系列查询来提供深入分析。在第一次向下钻取(链接点击)到第二个报告它工作正常,但在第2到第3报告它只是刷新页面而不是触发点击事件,但在页面刷新后它工作,这意味着用户必须点击两次进入第3次报告。

这就是我所拥有的:

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