我有以下两个对象
public partial class ProgramObj
{
public int id;
public PersonObj myPerson;
}
public class PersonObj
{
public int id;
public string full_name;
}
我正在从SqlDataReader中为一个转发器分配一个ProgramObj列表
program_list.DataSource = reader;
program_list.DataBind();
我想要做的是访问每个ProgramObj中PersonObj的full_name属性 我尝试过多种方法,唯一能让我获得输出值的是
<%# DataBinder.Eval(Container.DataItem, "id") %>
它让我获得了ProgramObj的id,但我想得到PersonObj的名字,我想
<%# DataBinder.Eval(Container.DataItem, "myPerson.full_name") %>
会起作用,但它似乎没有让我到任何地方。
我还尝试了一个带有
的ItemDataBoundPersonObj myPerson = (PersonObj)e.Item.DataItem;
lblUserName.Text = myPerson.Full_Name_RFL;
和
<%# DataBinder.Eval(Container.DataItem, "myPerson") %>
但我得到一个错误,它无法将类型DataRecordInternal的对象强制转换为PersonObj。想法?
答案 0 :(得分:1)
如果你这样做,你的ItemDataBound应该可以工作:
PersonObj myPerson = ((ProgramObj)e.Item.DataItem).myPerson;
lblUserName.Text = myPerson.full_name;
Becausse转发器绑定到ProgramObj对象的列表,DataItem将是ProgramObj。因此,如果需要PersonObj对象,则需要获取myPerson属性。
答案 1 :(得分:1)
请参阅asp.net上的What's the deal with Databinder.Eval and Container.DataItem?文章。另外,请在此处查看此GridView bound with with Properties of nested class问题。