以下语句:
<ItemTemplate>
    <asp:CheckBox ID="chkIsFlagMust" runat="server" Checked='<%# Bind("is_flag_must") %>' />
</ItemTemplate>报错:
invalidcastexception was unhandled by user code为什么呢?is_flag_must返回的是字串'true'或'false'

解决方案 »

  1.   

    //****好像函数写错了吗
    <%#ConvertUserType(DataBinder.Eval(Container.DataItem,"UserType)).ToString()%>
      

  2.   

    <%# Bind("is_flag_must").ToString()=="true"?"checked=true":"" %>
      

  3.   

    忘了说,我在VS2005下开发的。是不是ASP.NET 2.0是不同实现的?
      

  4.   

    vs2005里直接有 asp:CheckBoxField,如果DataField对应的字段是bit,那么它就自动绑定,何必自己做一个呢
      

  5.   

    对应的字段类型不是bit的,是通过条件语句查询出来的。有没人知道应该这样怎样怎样处理?
      

  6.   

    不管是什么,用.ToString()==""?"true":"false"应该可以吧
      

  7.   

    ToString()==""?"true":"false",也觉的这样可以
      

  8.   

    在VS2005中,要先在SQL语句中转为CONVERT(BIT,'1')才能正常绑定。还有没有其它可实现的方法?
      

  9.   

    数据绑定http://support.microsoft.com/kb/307860/zh-cn#1a
      

  10.   

    <%# DataBinder.Eval(Container,"DataItem.is_flag_must").ToString()==null?"true":"false" %>
      

  11.   

    2.0的数据绑定写法确实和1.x不同,没有Container之类的东西了。关键是is_flag_must这个字段到底是什么类型,如果不是bit就必须手动转换为bool(也是用a?b:c表达式)。
      

  12.   

    那为什么我连这样写<%# Bind("is_flag_must").ToString() %>,ASP.NET 2.0都不能编译通过?
      

  13.   

    <%# Eval("is_flag_must").ToString() %>呢?你需要的是Bind(双向)还是Eval(单向)?
      

  14.   

    事实证明,是不能在服务端控件里,再用Bind或Eval进行绑定的。
      

  15.   

    如果在服务器控件里不能再用Bind和Eval,而只能在HTML中用,那么ASP.NET 2.0就实在太弱了吧?我在ASP.NET 2.0中一直都是这样绑定的,从来都没什么问题。
      

  16.   

    -----针对VS2005-----
    1、最开始的错误有2种情况会遇到。第一是你绑定的数据库里的那一列不是bit类型;第二是有可能列是bit类型而取到的某一行对应的此列值为空(所以对于数据库中bit列,最好定义为‘非空’并且默认值设为0或1<对应false/true>);
    2、<%# Bind("is_flag_must").ToString() %>,ASP.NET 2.0都不能编译通过?---这种写法在VS2005里本身就错误,你的错误在于不了解双向绑定(Bind)和单向绑定(Eval)的机制,可以看看msdn。简单说,你写<%# Eval("is_flag_must").ToString() %>可以,但是写<%# Bind("is_flag_must").ToString() %>就不行。并不是说--‘不能在服务端控件里,再用Bind或Eval进行绑定’。==== 
    ~~~~ 我的Blog:http://blog.csdn.net/quou2002