昨晚调试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朋友互相交流