开发者

ASP.NET Binding integer to CheckBox's Checked field

开发者 https://www.devze.com 2022-12-08 23:21 出处:网络
I have a following ListView item template, in which I am trying to bind integer value to Checked property of CheckBox.

I have a following ListView item template, in which I am trying to bind integer value to Checked property of CheckBox.

IsUploaded value contains only 0 and 1...

<asp:ListView ID="trustListView" runat="server">
    <ItemTemplate>
        <asp:CheckBox ID="isUploadedCheckBox" runat="server"
            Checked='<%# Bind("IsUploaded") %>' />
    </ItemTemplate>
</asp:ListView>

But ASP.NET complains that

Exception Details: System.InvalidCastException: Sepcified cast is not valid

开发者_如何学JAVA

Even though following code using DataBinder.Eval() works,

I need to have a 2-way binding, thus need to use Bind().

<asp:CheckBox ID="isUploadedCheckBox2" runat="server"
    Checked='<%# Convert.ToBoolean(
        DataBinder.Eval(Container.DataItem, "IsUploaded"))) %>' />

How can I convert 0's and 1's to boolean using Bind()?


[ANSWER] I have extended auto-generated type through partial class by adding a new property mentioned in the answer by Justin


If you're willing to change the class, add a property on the class that's a boolean

public bool IsUploadedBoolean
{
   get { return IsUploaded != 0; }
   set { IsUploaded = value ? 1 : 0; }
}

If not, you may have success with a TypeConverter:

  1. Create a custom TypeConverter which will handle 0 and 1 to boolean conversions
  2. Stick the TypeConverterAttribute on the IsUploaded property to direct .NET to your custom typeconverter.


How about adding a property to your class which does the conversion?

public bool IsUploadedBool
{
  get { return IsUploaded == 1; }
}

and then bind to this IsUploadedBool property instead of directly to the underlying INT.

Marc


Kind of a cheesy work around would be to use a drop down list with list items to give the same effect:

<asp:DropDownList ID="ddlBool" runat="server" SelectedValue= '<%# Bind("IsUploaded") %>'>
    <asp:ListItem Text="True" Value="1" />
    <asp:ListItem Text="False" Value="0" />
</asp:DropDownList>


For more information visit: http://dhondiyals.wordpress.com/2010/05/03/binding-checkbox-with-integer-value-in-gridviewtrick/


How about (btw i am using a stored procedure)

Aspx page

<asp:CheckBox ID="social_facebook" runat="server"  Checked='<%# Bind("True") %>' />Facebook

Code behind

cmd.Parameters.Add("@p_facebook", SqlDbType.Bit).Value = social_facebook.Checked;


Solution:

Hi, I'm also using Ajax rating inside a GridView and I ran into this problem. After looking through several forums, I tried this and it worked for me. I hope it helps you:

<%# Convert.ToInt32(Eval("EVALUATION")) %>

returns an integer, since you're using Checked which is an integer.

0

精彩评论

暂无评论...
验证码 换一张
取 消