4

私はDetailsViewwhich : insert を使用しています。デフォルトでチェックボックスをオンにしたいのですが、ユーザーはチェックボックスをオフに変更できますが、チェックボックスをバインドするには、使用する必要DefaultModeあります

Checked='<%# Bind("Cit_Visible") %>' 

これにより、チェックボックスのデフォルトステータスがオフになります。どうすればこれを解決できますか?

4

3 に答える 3

2

データバインディング時にチェックボックスをオンにする場合は、チェックボックスのテキストプロパティに値を割り当てることができます。

<asp:CheckBox ID="chl" runat="Server" Checked="true" Text="<%# Bind('Cit_Visible') %>" />

コードビハインドでは、テキスト値にアクセスしてDBに保存できます

    CheckBox MyCheckbox = new CheckBox();
    MyCheckbox = (CheckBox)DetailsView1.FindControl("chl");
    Response.Write(MyCheckbox.Checked);
于 2012-10-29T04:15:38.503 に答える
2

DetailsView データ コントロールを使用していて、チェックボックスの値がある場合、すべての表示モードを処理する asp:CheckBoxField から始めることができます。チェックボックスのバインドを維持したいが、おそらく挿入のためにデフォルトをオンに設定したい場合は、次のことができます。

フィールドを TemplateField に変換します。これは、Visual Studio のデザイン ビューを使用するか、このタイプのブロックを置き換えることによって手動で行うことができます。

<asp:CheckBoxField DataField="Information" HeaderText="Information" SortExpression="Information" />

このようなコードのブロックで

<asp:TemplateField HeaderText="Information" SortExpression="Information">
            <EditItemTemplate>
                <asp:CheckBox ID="chkInformation" runat="server" Checked='<%# Bind("Information") %>' />
            </EditItemTemplate>
            <InsertItemTemplate>
                <asp:CheckBox ID="chkInformation" runat="server" Checked='<%# Bind("Information") %>' />
            </InsertItemTemplate>
            <ItemTemplate>
                <asp:CheckBox ID="chkInformation" runat="server" Checked='<%# Bind("Information") %>' Enabled="false" />
            </ItemTemplate>
        </asp:TemplateField>

次に、チェックボックスのデフォルト値をチェックするように設定するには、分離コードでこれを行うことができます

Protected Sub dvInformation_PreRender(sender As Object, e As EventArgs) Handles dvInformation.PreRender
    If CType(sender, DetailsView).CurrentMode = DetailsViewMode.Insert Then
        Dim chk As Object = CType(sender, DetailsView).FindControl("chkInformation")
        If chk IsNot Nothing AndAlso chk.GetType Is GetType(CheckBox) Then
            CType(chk, CheckBox).Checked = True
        End If
    End If
End Sub

C# (VB から変換)

protected void dvInformation_PreRender(object sender, EventArgs e)
{
        if (((DetailsView)sender).CurrentMode == DetailsViewMode.Insert) {
            object chk = ((DetailsView)sender).FindControl("chkInformation");
            if (chk != null && object.ReferenceEquals(chk.GetType(), typeof(CheckBox))) {
                ((CheckBox)chk).Checked = true;
            }
        }
}

これは、サポートするデータベースの値が null 以外のビット フィールドである場合に最適です。

于 2014-03-07T22:50:56.633 に答える