我加入一个模板列用来传递参数:<asp:TemplateColumn HeaderText="站点名称">
<ItemTemplate>
<asp:hyperlink text='<%#DataBinder.Eval(Container.DataItem,"wlname")%>' runat=server NavigateUrl='<%#"go2site.aspx?wlid=" + DataBinder.Eval(Container.DataItem,"wlid").ToString() + "&wlname=" + DataBinder.Eval(Container.DataItem,"wlname").ToString()+"&tid="+DataBinder.Eval(Container.DataItem,"tid").ToString() %>'/>
</ItemTemplate>
</asp:TemplateColumn>前两个wlname,wlid,都没有问题,但是最后一个tid就报错,
"DataBinder.Eval:“System.Data.DataRowView”不包含名称为 tid 的属性。 "这是我的sql语句,
string sqlstr="select a.*,b.* from wl_sites a,wl_type b where a.tid =b.tid order by a.hits desc";请问高手这是什么问题?

解决方案 »

  1.   

    改写sql语句,相同字段应该取别名,以区别
      

  2.   

    字段不唯一,把需要显示的字段写全
    string sqlstr="select a.tid,b.wlid from wl_sites a,wl_type b where a.tid =b.tid order by a.hits desc";
      

  3.   

    a和b都有tid字段,应该各取别名进行区分,否则系统会为了区分把这两个字段改为别的名字。
      

  4.   

    楼上各位,只能是修改SQL语句到达目的么?
    如果把
    DataBinder.Eval(Container.DataItem,"tid").ToString() %>
    改成
    DataBinder.Eval(Container.DataItem,"a.tid").ToString() %>
    程序会报错.
      

  5.   

    好了,改个名字就ok了,string sqlstr="select a.wlid,a.wlname,a.wlurl,a.tid as ttid,a.hits,a.cr_time,a.logo,a.wl_intro,b.tid,b.tname from wl_sites a,wl_type b where a.tid =b.tid order by a.hits desc";前台:
    DataBinder.Eval(Container.DataItem,"ttid").ToString()
    但是我想问的是,还有更简单的方法么?
      

  6.   

    你如果这样就不抱错了,string sqlstr="select a.tid as tid,b.wlid as wlid  from wl_sites a,wl_type b where a.tid =b.tid order by a.hits desc";
    DataBinder.Eval(Container.DataItem,"tid").ToString() %>