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

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

/1.jpg" alt="preview" 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 中。

标签: asp.net datalist


【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多