Datalist中获取模板中控件Label的值

 昨晚调试datalist时遇到了一些问题,特将此记下,希望给用的上的朋友一点帮助

 在datalist的ItemCreated事件中获取在ItemTemplete的一个Label标签

<ItemTemplate>
<asp:Label ID="lblCreationTime2" runat="server"
Text
='<%# Bind("creationTime","{0:d}") %>'></asp:Label>
</ItemTemplate>

 的确,很简单,我匆匆的在ItemCreated事件中写了大家都很熟悉的代码

 if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
  {  
     Label lblcreation = (Label)e.Item.FindControl("lblCreationTime2");
   }

 然后我要做的事情就是获取这个lblcreation的Text属性,用DateTime.Parse强制转换一下,这时候程序总是提示

 

 起初以为是参数写的不对,我修改了一下代码,将方法中参数lblCreationTime2改为lblCreationTime,再次运行程序

 

 简单的证明并不是这些粗心的问题,于是我设断点调试,发现了一个奇怪的现象

 

标签到最后还是空值,这样折腾了我近两个小时,终于在MSDN上找到了一句话:

 

问题的原因算是解决了,那么怎么解决这个问题呢?

然后我又不停的找啊找,最终在宿舍网断开的那关键时刻找到了解决方法:

      Control ctrl = e.Item.Controls[0];
      Label lbl = (Label)ctrl.FindControl("lblCreationTime2");
       lbl.Text = DataBinder.Eval(e.Item.DataItem, "creationTime").ToString();

 这时候,DateTime.Parse(lbl.Text)时顺利通过,

 贴一下这个功能完整代码吧:

代码
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
{        Control ctrl = e.Item.Controls[0];       
          Label lbl = (Label)ctrl.FindControl("lblCreationTime2");         
          lbl.Text = DataBinder.Eval(e.Item.DataItem, "creationTime").ToString();     
          string time = lbl.Text;   
          Response.Write(time);

 本文参考了:http://kb.cnblogs.com/a/730044/

PS:这是我的第一篇技术博客,希望大家能够提意见,也希望和更多的.NET朋友互相交流

             

原文地址:https://www.cnblogs.com/626498301/p/tercy.html