1

ASP.NETの場合、レコードの挿入と編集にDetailsViewを使用しています。編集モードの場合、主キーフィールドは変更しないでください。表示したくありません。挿入モードの場合、主キーフィールドが存在せず、ユーザーがDropDownListを介して指定できるため、主キーフィールドを表示して、一意の値を選択できるようにします。TemplateFieldは、主キーフィールドのDetailsViewマークアップで使用されます(したがって、挿入モードのDropDownList)。

私の問題は、主キーフィールドを編集モードで表示せず、挿入モードで表示できないことです。マークアップで私は持っています:

<asp:TemplateField HeaderText="name" InsertVisible="True" Visible="True">
    <InsertItemTemplate>
        <asp:DropDownList ID="ddl2NonMembers" runat="server"
            Width="155px" 
            Sourceless="sqlNonMembers" 
            DataTextField="name" 
            DataValueField="id_adm" 
            SelectedValue='<%# Bind("member_grp") %>'>
        </asp:DropDownList>
    </InsertItemTemplate>
</asp:TemplateField>

TemplateField Visible = "True"を使用すると、HeaderText = "name"は常に、編集モードにしたくないものを表示します。TemplateField Visible = "False"を使用すると、挿入モードに必要のないフィールドが表示されることはありません。

挿入と編集モードで必要な表示動作を実現するにはどうすればよいですか。純粋なマークアップアプローチに頼るのではなく、プログラムでいくつかのプロパティを変更することは問題ありませんが、解決策を理解することはできません。

お知らせ下さい!

4

1 に答える 1

1

詳細表示モードをテストして、-編集-モードになっているかどうかを確認できます。その後、プログラムでDropDownListを非表示にできます。

if (myDetailsView.CurrentMode == DetailsViewMode.Edit) 
{
    DropDownList ddl2NonMembers = (DropDownList)myDetailsView.FindControl("ddl2NonMembers");
    ddl2NonMembers.Visible = false;
}

また、列全体を非表示にすることもできますが、その列のインデックスを知っている必要があります。列インデックスが#5であると仮定すると、次のようなことができます。

if (myDetailsView.CurrentMode == DetailsViewMode.Edit) 
{
    myDetailsView.Columns[5].Visible = false;
}

最後に、Code-Behindで関数を作成して、DetailsViewの現在の値をチェックし、それをテンプレートフィールドのVisibleプロパティに割り当てることができます。

public bool showPKField() {
    bool result = true;
    if(myDetailsView.CurrentMode == DetailsViewMode.Edit)
        result = false;
    return result;
}

テンプレートフィールド内:

<asp:TemplateField HeaderText="name" InsertVisible="True" Visible='<%# showPKField() %>'>
于 2010-07-18T01:58:33.277 に答える