【发布时间】:2010-02-04 04:36:43
【问题描述】:
我想将 e.Item.DataItem 中的值读入一个字符串,但无论出于何种原因,我似乎无法得到它,尽管我可以在监视窗口中看到它
【问题讨论】:
-
如果我们要了解正在发生的事情,我们需要更多的信息。
-
这很模糊。请提供上下文。 Web 窗体、Windows 窗体、.NET 版本等
标签: linq
我想将 e.Item.DataItem 中的值读入一个字符串,但无论出于何种原因,我似乎无法得到它,尽管我可以在监视窗口中看到它
【问题讨论】:
标签: linq
从similar question 获得以下信息
DataBinder.Eval(e.Item.DataItem, "PropertyName")
【讨论】:
你能补充更多信息吗?您是真的想要一个字符串值还是需要该值中的特定字符串?
如果您需要一个应该可行的字符串值。监视窗口倾向于通过在对象上调用 .ToString 来显示值。如果监视窗口中的值是您想要的字符串,那么您应该可以通过简单地调用 ToString 来获取它。
var item = e.Item.DataItem.ToString();
您还需要对各种属性进行空值检查。
【讨论】:
听起来你做了类似的事情:
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?)
【讨论】: