在gridview中,想在前后控制label的visible值,visible值由两个字段值决定.
当字段A值等于字段B值时,visible=false,否则visible=true用这个总报错:
 Visible='<%# Bind("A") %>!=<%# Bind("B") %>? true:false' 总问应怎样写?

解决方案 »

  1.   

    ' <%# Bind("A") %>!= <%# Bind("B") %>? true:false' 搞清楚这是什么的语法?
    在HTML虽然可以使用JS带这样是不对的。<script>
    var visible_<%# Bind("ID") %>=<%# Bind("A") %>!= <%# Bind("B") %>? true:false;
    </script>
    Visible=' visible_<%# Bind("ID") %>' 
      

  2.   

    谢谢我用常量这样写是可以的: Visible='<%# 1!=1? true:false %>'
    换上两个字段就不行了,这有什么区别?
      

  3.   

    <%# 1!=1? true:false %>用三目运算符号
    Visible=' <%# Bind("A") %>!= <%# Bind("B") %>? true:false' 
    红色部分为C#语法,其他的为HTML代码,HTML并不支持运算,更不支持三目运算(HTML只是标签脚本)
      

  4.   

    我试了,提出这个:
    "无法从其“Visible”属性的字符串表示形式“ visible_<%# Bind("ID") %>”创建“System.Boolean”类型的对象。"作法:把这个放在<head></head>内
    <script>
    var visible_<%# Bind("ID") %>=<%# Bind("A") %>!= <%# Bind("B") %>? true:false;
    </script><asp:TemplateField  SortExpression ="returndate">
    <HeaderTemplate>   </HeaderTemplate>
      <ItemTemplate>                       
      <asp:Label ID="GVlblreturndate" runat="server"  Visible=' visible_<%# Bind("ID") %>'  Text='<%# Bind("returndate") %>'></asp:Label> 
      </ItemTemplate> 
    ...
      

  5.   

    <asp:TemplateField  SortExpression ="returndate"> 
    <HeaderTemplate>  </HeaderTemplate> 
      <ItemTemplate>      
    <script> 
    var visible_ <%# Bind("ID") %>= <%# Bind("A") %>!= <%# Bind("B") %>? true:false; 
    </script>                 
      <asp:Label ID="GVlblreturndate" runat="server"  Visible=' visible_ <%# Bind("ID") %>'  Text=' <%# Bind("returndate") %>'> </asp:Label> 
      </ItemTemplate> 
    ... 
      

  6.   


    还是有疑问:
    不支持运算:1!=1 这算不算运算?
    <%# 1!=1? true:false %>用三目运算符号  ,HTML并不支持运算,更不支持三目运算
    <%# 1!=1? true:false %>是用三目运算符号且能正常运行.
    那html怎么又不支持三目运算了?不懂,请教!
      

  7.   

    <asp:TemplateField  SortExpression ="returndate"> 
    <HeaderTemplate>  </HeaderTemplate> 
      <ItemTemplate>      
                   
      <a ID="lable_<%# Bind("ID") %>" runat="server" style="display:none" Text=' <%# Bind("returndate") %>'> </a><script> 
    var visible_ <%# Bind("ID") %>= <%# Bind("A") %>!= <%# Bind("B") %>? true:false; 
    if(visible_ <%# Bind("ID") %>)
    {
    document.getElementById("lable_<%# Bind("ID") %>").style.display="";
    }else
    {
    document.getElementById("lable_<%# Bind("ID") %>").style.display="none";
    }
    </script> 
     
      </ItemTemplate> 
    ... 
      

  8.   

    <%内是C#程序%>,以外是HTML
      

  9.   

    还是不行,提示这个:
    必须将对 Bind 的调用分配给模板中的控件的属性。
      

  10.   

    <a ID="lable_ <%# Bind("ID") %>" runat="server" style="display:none" Text=' <%# Bind("returndate") %>'> </a> 
    <a></a>根本就没text属性值...
      

  11.   

    <%#DataBinder.Eval(Container.DataItem,"字段名")%>function check(A,B)
    {
    if(A!=B)
    return true;
    else
    {
    return false;
    }
    }Visible=' check(<%#DataBinder.Eval(Container.DataItem,"A")%>,<%#DataBinder.Eval(Container.DataItem,"B")%>)'这样侃侃
      

  12.   

    在gridview的事件里写不是很简单吗
      

  13.   


    不行,提示这个:
    无法从其“Visible”属性的字符串表示形式“javascript:check(2,2)”创建“System.Boolean”类型的对象。开始时字段绑定也不错,后来改为两个常量,可还是一样.
      

  14.   

    Visible=' <%# Bind("A") != Bind("B") ? true : false %>' 
      

  15.   

    如果Bind("A") 这个不好用 你就用Eval("A") 一定可以
    Visible=' <%# Eval("A") != Eval("B") %>' 这样写就行了.
      

  16.   

    重新描述:
    c#:想在前台控制gridview模板列中的label的visible属性,
    label的visible属性由两个字段A和B决定当字段值A=字段值B时,要求label.visble=false;
    否则为label.visble=true我的想法时在aspx页面中用这个实现:
    模板列前台代码:
     <asp:TemplateField  SortExpression ="returndate">
       <HeaderTemplate>
         <asp:LinkButton ID="GVlbtnreturndate" ... >所需纳期</asp:LinkButton>                       
     </HeaderTemplate>
     <ItemTemplate>   
        <asp:Label ID="GVlblreturndate" runat="server" Visible=' <%# Bind("A") %>!= <%# Bind("B") %>? true:false'  Text='<%# Bind("returndate") %>'></asp:Label>      
      </ItemTemplate> 
    </asp:TemplateField>            
      

  17.   

    <asp:Label ID="GVlblreturndate" runat="server" Visible=' <%# (Eval("A") != Eval("B")) ?"true":"false"  %>' Text=' <%# Bind("returndate") %>'> 
      

  18.   


    功能可以实现了,但还有一个小问题:
    字段A,B是varchar(20)(不想改数据类型),但实际存放的是时间型,如2008-7-16
    当A,B字段值相等时,visible也true,也就是说<%# Eval("A") 和Eval("B")取到的值有点问题.
    我在后台.cs的gridview的RowDataBound事件实现这个功能,就是正常的.用eval是不是有什么特殊的情况要注意?
      

  19.   

    判断显示仅用<%# Eval("a").toString()==Eval("b").toString()?true:false %>就够了....
      你这里不需要Bind("a")
    搞清楚在什么情况下用Bind,什么情况下用Eval比较好,2者的机制有很大差别
      

  20.   

    时间型,如2008-7-16 
    可以datetime.parse(Eval("a").toString())后再比较
      

  21.   

    判断显示仅用 <%# Eval("a").toString()==Eval("b").toString()?true:false %>就够了.... 以datetime.parse(Eval("a").toString())后再比较在html中,可以这样用吗?
      

  22.   

    在RowdataBound事件中判断不行么?
      

  23.   

    Visible=' <%# (Bind("A") != Bind("B"))? true:false %>'
      

  24.   

    这样就可以了 
    <asp:Label ID="GVlblreturndate" runat="server" Visible=' <%# (Eval("A").ToString() != Eval("B").ToString()) ?"true":"false"  %>' Text=' <%# Bind("returndate") %>'> Eval 和Bind的区别是bind可以将只进行回传个对象实例,在用到GridView的编辑功能时 你会发现使用bind可以将你更改后的值传给gridview 进而对数据库操作。
    如果你对绑定后的数据进行了转换,这样的数据是无法回传的,所以这样的情况只能用eval ,类似于只读,不可改。
      

  25.   

    Visible='<%#((int)Eval("is_taskimage"))==0%>'