ASP.NET Binding integer to CheckBox’s Checked field

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

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

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.

Method 2

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

Method 3

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>

Method 4

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

Method 5

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;

Method 6

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.


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x