• 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朋友互相交流

                 

  • 相关阅读:
    【转载】大连商品交易所-套利交易相关问题
    LC 1340. Jump Game V
    1057 Stack
    1059 Prime Factors
    LC 1425. Constrained Subset Sum
    LCP 13. 寻宝
    P3381 【模板】最小费用最大流
    P3376 【模板】网络最大流
    LC 面试题51. 数组中的逆序对
    LC 466. Count The Repetitions
  • 原文地址:https://www.cnblogs.com/626498301/p/tercy.html
Copyright © 2020-2023  润新知