ASP.NET 访问 DataList 控件内的 Web 控件

Posted

技术标签:

【中文标题】ASP.NET 访问 DataList 控件内的 Web 控件【英文标题】:ASP.NET Accessing web control inside DataList control 【发布时间】:2011-04-07 07:04:44 【问题描述】:

不知道为什么我无法访问 Panel 内部的 Label 控件,而 Panel 位于 DataList 内部

/1.jpg" style="width: 240px;" /> 更多东西在这里 面板>

但是当我尝试在 Page_Load 中使用“lbl”时,它似乎找不到控件?你能帮帮我吗?

ItemDataBound 和 Page_Load 事件 --------------------------------- 面板 p = DataList2.FindControl("panelPostDetails") 作为面板; 标签 l = p.FindControl("lblMorePictures") 作为标签; l.文本=代码;

该代码返回对象引用未设置为对象的实例。

提前致谢

更新:

ItemDataBound 和 Page_Load 事件 --------------------------------- 面板 p = DataList2.FindControl("panelPostDetails") 作为面板; 如果(p==null) System.Diagnostic.Debug.WriteLine("面板不存在"); 别的 System.Diagnostic.Debug.WriteLine("面板确实存在"); 输出: 面板不存在

到底发生了什么!?!

【问题讨论】:

panelPostDetails 是否存在?是 ItemTemplate 中的面板元素吗? 张贴标记 - 你可能错过了一些明显的东西。 @loviji - 是的,panelPostDetails 存在并且它在 ItemTemplate 中。 【参考方案1】:

通常,您可以在运行时通过处理 DataList 的 ItemCreated 或 ItemDataBound 事件来访问此类控件。这是一个示例事件处理程序:

protected void DataList2_ItemDataBound(object sender, DataListItemEventArgs e) 
   if (e.Item.ItemType == ListItemType.Item) 
        Label lbl = (Label)e.Item.FindControl("panelPostDetails").FindControl("lblMorePictures");
        lbl.Text = code;
   

像这样连接你的事件处理程序:

<asp:DataList ID="DataList2" runat="server" OnItemDataBound="DataList2_ItemDataBound" ...

【讨论】:

Label在Panel里面,Panel在DataList的ItemTemplate里面。 对不起,彼得,但仍然无法正常工作。我又更新了代码。 您还在尝试在 Page_Load() 中执行此操作吗?如果是这样,那就行不通了。您需要在 DataLists 的 ItemDataBound 事件中执行此操作。 抱歉,我刚刚查看了我的代码示例并意识到它有一个错误。我已经更新了它。在 ItemDataBound 事件处理程序中,您需要使用 e.Item.FindControl() 而不是 DataList2.FindControl【参考方案2】:

@Peter 的代码必须有效。

你也可以试试这个:

protected void DataList2_ItemDataBound(object sender, DataListItemEventArgs e)

        string st= (e.Item.FindControl("lblMorePictures") as Label).Text;


并将断点设置为st。就我而言,我收到lblMorePictures 的文本。

【讨论】:

【参考方案3】:

在我的表单视图中,我需要将CType 添加到FindControl。我了解DataList 不一定需要Ctype,但是小组可能需要此前缀。在这种情况下,frmDelView 是我的表单视图的名称。就我而言,下面的代码行在我的表单中的PreRender 中。这是创建表单时唯一的地方,它将返回我需要传递给向导步骤页面下一页上的标签的数据。很长的故事。 注意:我的代码是 vb 而不是 C#。它应该几乎或完全相同。

 CType(frmDelView.FindControl("txtcboDAcct"), TextBox).Text

【讨论】:

以上是关于ASP.NET 访问 DataList 控件内的 Web 控件的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET中使用TreeView控件

asp.net datalist 指定列植转换

ASP.net 关于datalist的问题

当控件位于 asp.net 的 UpdatePanel 中时,如何使用 Jquery 获取单击事件?

在asp.net中将数据绑定到html5 DataList

ASP.NET的ItemTemplate用法