7

次の ListView 項目テンプレートがあり、整数値をCheckedCheckBox のプロパティにバインドしようとしています。

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: 指定されたキャストが無効です

次のコードを使用してもDataBinder.Eval()動作
しますが、双方向バインディングが必要なため、使用する必要がありますBind()

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

を使用して 0 と 1 をブール値に変換するにはどうすればよいBind()ですか?


[回答]ジャスティン の回答に記載されている新しいプロパティを追加して、部分クラスを介して自動生成型を拡張しました

4

6 に答える 6

7

クラスを変更する場合は、ブール値であるクラスにプロパティを追加します

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

そうでない場合は、TypeConverter で成功する可能性があります。

  1. 0 と 1 からブール値への変換を処理するカスタムTypeConverterを作成します。
  2. TypeConverterAttributeを IsUploaded プロパティに貼り付けて、.NET をカスタム タイプ コンバーターに転送します
于 2009-10-13T16:45:30.513 に答える
3

変換を行うクラスにプロパティを追加するのはどうですか?

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

IsUploadedBool次に、基になる INT に直接ではなく、このプロパティにバインドします。

マルク

于 2009-10-13T16:32:14.060 に答える
2

安っぽい回避策の一種は、リスト項目でドロップダウンリストを使用して同じ効果を与えることです:

<asp:DropDownList ID="ddlBool" runat="server" SelectedValue= '<%# Bind("IsUploaded") %>'>
    <asp:ListItem Text="True" Value="1" />
    <asp:ListItem Text="False" Value="0" />
</asp:DropDownList>
于 2009-10-13T16:44:04.210 に答える
2

詳細については、http: //dhondiyals.wordpress.com/2010/05/03/binding-checkbox-with-integer-value-in-gridviewtrick/をご覧ください。

于 2010-05-03T17:30:14.363 に答える
1

どうですか(私はストアドプロシージャを使用しています)

Aspxページ

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

背後にあるコード

cmd.Parameters.Add("@p_facebook", SqlDbType.Bit).Value = social_facebook.Checked;
于 2010-05-21T16:08:56.390 に答える
0

解決:

こんにちは、GridView 内で Ajax 評価も使用していますが、この問題に遭遇しました。いくつかのフォーラムを調べた後、これを試してみましたが、うまくいきました。お役に立てば幸いです:

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

整数である Checked を使用しているため、整数を返します。

于 2013-08-21T01:08:20.977 に答える