ASP.NET Привязка целого числа к проверенному полю CheckBox - PullRequest
7 голосов
/ 13 октября 2009

У меня есть следующий шаблон элемента ListView, в котором я пытаюсь привязать целочисленное значение к Checked свойству CheckBox.

IsUploaded значение содержит только 0 и 1 ...

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

Но ASP.NET жалуется, что

Сведения об исключении: System.InvalidCastException: Sepcified приведен неверно

Даже если следующий код с использованием DataBinder.Eval() работает,
Мне нужна двусторонняя привязка, поэтому необходимо использовать Bind().

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

Как я могу преобразовать 0 и 1 в логическое значение, используя Bind()?


[ОТВЕТ] Я расширил автоматически сгенерированный тип посредством частичного класса, добавив новое свойство, упомянутое в ответе Джастина

Ответы [ 6 ]

7 голосов
/ 13 октября 2009

Если вы хотите изменить класс, добавьте свойство класса, которое является логическим

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

Если нет, у вас может быть успех с TypeConverter:

  1. Создание пользовательского TypeConverter , который будет обрабатывать 0 и 1 в логические преобразования
  2. Присвойте TypeConverterAttribute в свойстве IsUploaded, чтобы направить .NET в свой пользовательский преобразователь типов.
3 голосов
/ 13 октября 2009

Как насчет добавления свойства в ваш класс, который выполняет преобразование?

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

, а затем привязать к этому свойству IsUploadedBool, а не напрямую к базовому INT.

Марк

2 голосов
/ 03 мая 2010

Для получения дополнительной информации посетите: http://dhondiyals.wordpress.com/2010/05/03/binding-checkbox-with-integer-value-in-gridviewtrick/

2 голосов
/ 13 октября 2009

Обыкновенный обходной путь - использовать выпадающий список с элементами списка, чтобы получить тот же эффект:

<asp:DropDownList ID="ddlBool" runat="server" SelectedValue= '<%# Bind("IsUploaded") %>'>
    <asp:ListItem Text="True" Value="1" />
    <asp:ListItem Text="False" Value="0" />
</asp:DropDownList>
1 голос
/ 21 мая 2010

Как насчет (кстати, я использую хранимую процедуру)

Страница Aspx

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

Код позади

cmd.Parameters.Add("@p_facebook", SqlDbType.Bit).Value = social_facebook.Checked;
0 голосов
/ 21 августа 2013

Решение:

Привет, я также использую рейтинг Ajax внутри GridView и столкнулся с этой проблемой. Просматривая несколько форумов, я попробовал это, и это сработало для меня. Я надеюсь, что это поможет вам:

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

возвращает целое число, так как вы используете Checked, который является целым числом.

...