我想将e.Item.DataItem中的值读入字符串但是无论出于何种原因,我似乎无法得到它,尽管我可以在监视窗口中看到它
答案 0 :(得分:10)
DataBinder.Eval(e.Item.DataItem, "PropertyName")
答案 1 :(得分:2)
您可以添加更多信息吗?你真的想要一个字符串值,还是需要一个特定的字符串?
如果您需要一个应该可行的字符串值。监视窗口倾向于通过在对象上调用.ToString来显示值。如果监视窗口中的值是您想要的字符串,那么您应该只需调用ToString即可获得它。
var item = e.Item.DataItem.ToString();
您还需要对各种属性进行空检查。
答案 2 :(得分:0)
听起来你做过类似的事情:
obj.Datasource = (from .... select new { a=..., b=...}).ToList();
对于您的某件商品,您希望获得“a”或“b”的值,对吗?
你可以,但它很复杂(不推荐)。要做到这一点,你必须将e.Item.DataItem强制转换为正确的类,但这是一个匿名类型,这意味着你不能在没有一些技巧的情况下指定强制转换。你可以尝试这样的事情:
private T ForceCast(T prototype, object obj)
{
return (T)obj;
}
然后,调用ForceCast(new {a = ...,b = ...},e.Item.DataItem)。我认为如果你在同一个程序集中就行了(你为a和b提供的值得到了正确的类型 - 编译器会为你猜T并弄明白)。但是,更好的方法是只定义一个真实的类来保存从数据源返回的数据。然后你可以将e.Item.DataItem强制转换为该类,你会没事的。
(注意:我实际上并没有尝试过运行这段代码 - 这只是我在读这篇文章时的一个想法,但我想我以前见过它。也许它是this blog? )