<%# DataBinder.Eval(Container.DataItem,"job_id")%>
这个是repeater、datalist、datagrid里常用的表达式,使用反射来获得数据源并返回相应项现在我的疑问是,这个Container 是什么?这个为什么可以每绑定一行就获得一个值?我以前写过一个简单的支持模板的数据控件,Container是一个乘放模板的容器控件,然后DataItem是它公开的一个属性,用来返回对数据源当前行的引用,可是当我们这样使用
<%string s= DataBinder.Eval(Container.DataItem,"job_id");%>
就错了,“找不到类型或命名空间名称“Container”(是否缺少 using 指令或程序集引用?)”这样就正确
<%#((DataRowView)Container.DataItem)[1].ToString()%>
这是为什么?<%#%>在这里起什么作用?如果在.cs代码里,可以在ItemDataBound事件里这样获得
string s=((DataRowView)e.Item.DataItem)[0].ToString();但如果是在.aspx里,是不是我们没有办法得到乘放模板的容器的引用?

解决方案 »

  1.   

    呵呵,多谢notus忧他人之忧而忧,密切关注ing……
      

  2.   

    但如果是在.aspx里,是不是我们没有办法得到乘放模板的容器的引用?>>>>>>>>>>>>>>>>>>什么意思?
      

  3.   

    就是说不是在.cs文件里,而是在aspx页面中用脚本块<%%>的方式得到该行的数据,也不用<%#%>
      

  4.   

    http://blog.joycode.com/saucer/archive/2004/04/14/19456.aspx
      

  5.   

    Container是方法呀。他有个DataItem的属性
      

  6.   

    页面代码?还是什么???
    得到该行的数据?
    Dataset.Tables["tablename"].Rows[ItemIndex]["field"].ToString();
      

  7.   

    汗……
    我的意思是这样
    <asp:DataList id="DataList1" runat="server">
    <ItemTemplate>
    <%# # DataBinder.Eval(Container.DataItem,"uid")%>
    <%#
    ((DataRowView)Container.DataItem)[1].ToString()
    %>
    <%
    //do something ....
    %>
    </ItemTemplate>
    </asp:DataList>
    就是在这里面通过<%%>里的语句获得绑定行的某些值
      

  8.   

    不能这么做的,如果你要做复杂的运算或操作,放在OnItemDataBound里做, 或者写个函数string GetData(DataRowView drv)
    {
      //...
    }<%# GetData((DataRowView)Container.DataItem)%>
    或者<asp:Panel runat="server" Visible='<%# ((DataRowView)Container.DataItem)[1].ToString() == "1" %>'>
    abc</asp:Panel><asp:Panel runat="server" Visible='<%# ((DataRowView)Container.DataItem)[2].ToString() == "2" %>' />
    def</asp:Panel>