views:

1469

answers:

5

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

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

+1  A: 

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

marc_s
@marc_s: You meant double "==" not "=" :)
Sung Meister
I did - of course - thanks ! Updated
marc_s
A: 

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>
kscott
Sorry scott but I have to stick to "CheckBox" for my particular case. But thank you for giving me an insight on this.
Sung Meister
@kscott: Would you be able to make change to your answer? (add a dot or etc.) so that I can upvote your answer? I consider your answer to be a valid option for my case as well. Thanks.
Sung Meister
+2  A: 

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.
Justin Grant
+1  A: 

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

Kailash Dhondiyal
That's a neat ***trick*** Kailash. Thank you.
Sung Meister
+1  A: 

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;