对于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”时,该字段永远不会显示我不想要的插入模式。
如何实现插入编辑模式所需的显示行为。我可以通过编程方式更改某些属性,而不是依赖纯粹的标记方法,但我无法找到解决方案。
请指教!
答案 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() %>'>