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

您可以测试详细信息查看模式,看看它是否处于 -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() %>'>
于 2010-07-18T01:58:33.277 回答