我为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();
答案 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