ASP.NET DetailsView更改字段显示以进行编辑插入模式

时间:2010-07-18 01:22:43

标签: asp.net detailsview templatefield

对于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”时,该字段永远不会显示我不想要的插入模式。

如何实现插入编辑模式所需的显示行为。我可以通过编程方式更改某些属性,而不是依赖纯粹的标记方法,但我无法找到解决方案。

请指教!

1 个答案:

答案 0 :(得分:1)

您可以测试详细信息视图模式并查看它是否处于-Edit-模式。然后,您可以以编程方式隐藏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的当前值并将其分配给Template字段的Visible属性:

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

在模板字段中:

<asp:TemplateField HeaderText="name" InsertVisible="True" Visible='<%# showPKField() %>'>