在gridview中,想在前后控制label的visible值,visible值由两个字段值决定.
当字段A值等于字段B值时,visible=false,否则visible=true用这个总报错:
Visible='<%# Bind("A") %>!=<%# Bind("B") %>? true:false' 总问应怎样写?
当字段A值等于字段B值时,visible=false,否则visible=true用这个总报错:
Visible='<%# Bind("A") %>!=<%# Bind("B") %>? true:false' 总问应怎样写?
在HTML虽然可以使用JS带这样是不对的。<script>
var visible_<%# Bind("ID") %>=<%# Bind("A") %>!= <%# Bind("B") %>? true:false;
</script>
Visible=' visible_<%# Bind("ID") %>'
换上两个字段就不行了,这有什么区别?
Visible=' <%# Bind("A") %>!= <%# Bind("B") %>? true:false'
红色部分为C#语法,其他的为HTML代码,HTML并不支持运算,更不支持三目运算(HTML只是标签脚本)
"无法从其“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>
...
<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>
...
还是有疑问:
不支持运算:1!=1 这算不算运算?
<%# 1!=1? true:false %>用三目运算符号 ,HTML并不支持运算,更不支持三目运算
<%# 1!=1? true:false %>是用三目运算符号且能正常运行.
那html怎么又不支持三目运算了?不懂,请教!
<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>
...
必须将对 Bind 的调用分配给模板中的控件的属性。
<a></a>根本就没text属性值...
{
if(A!=B)
return true;
else
{
return false;
}
}Visible=' check(<%#DataBinder.Eval(Container.DataItem,"A")%>,<%#DataBinder.Eval(Container.DataItem,"B")%>)'这样侃侃
不行,提示这个:
无法从其“Visible”属性的字符串表示形式“javascript:check(2,2)”创建“System.Boolean”类型的对象。开始时字段绑定也不错,后来改为两个常量,可还是一样.
Visible=' <%# Eval("A") != Eval("B") %>' 这样写就行了.
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>
功能可以实现了,但还有一个小问题:
字段A,B是varchar(20)(不想改数据类型),但实际存放的是时间型,如2008-7-16
当A,B字段值相等时,visible也true,也就是说<%# Eval("A") 和Eval("B")取到的值有点问题.
我在后台.cs的gridview的RowDataBound事件实现这个功能,就是正常的.用eval是不是有什么特殊的情况要注意?
你这里不需要Bind("a")
搞清楚在什么情况下用Bind,什么情况下用Eval比较好,2者的机制有很大差别
可以datetime.parse(Eval("a").toString())后再比较
<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 ,类似于只读,不可改。