我有一个使用模板字段的DetailsView。我希望发生的情况是,当字段值为“FTP”时,它将显示与FTP相关的字段,否则显示与SFTP相关的字段。如何动态地隐藏DetailsView中的模板字段
我已阅读并且回答here。但是,它似乎并没有工作。我试图改变变量之前和之后我databind我的DetailsView。有人能指出我做错了什么吗?
另外,我需要在这个页面上单独使用大约20个字段来完成此操作,所以我试图避免使用FindControl()的复杂循环结构。
这是我的一些代码。
<ItemTemplate>
<asp:Label ID="REPRESENTATION_TYPELBL" runat="server" Visible='<%# showFTP %>'
Text='<%# Bind("REPRESENTATION_TYPE") %>'></asp:Label>
</ItemTemplate>
代码背后:
protected bool showFTP = false; // Tried initializing as class variable
protected bool showSFTP; // and also not initializing
protected void Page_Load(object sender, EventArgs e)
{
ChooseFTPDisplay("SFTP"); // Tried setting it in Page_Load and not in Page_Load
}
protected void FTPGetBind()
{
if (FTPLookupDDL.SelectedIndex != 0)
{
DataTable tbl = BL.GetFTPRow("FTPLookUpID"); // data retrieval
//ChooseFTPDisplay((string)tbl.Rows[0]["FTP_MODE"]); // tried here
FTPGetView.DataSource = tbl;
FTPGetView.DataBind();
ChooseFTPDisplay((string)tbl.Rows[0]["FTP_MODE"]); // tried here
}
}
private void ChooseFTPDisplay(string mode)
{
if (mode == "FTP")
{
showFTP = true;
showSFTP = false;
}
else // Could be null or "SFTP"
{
showFTP = false;
showSFTP = true;
}
}
编辑
现在我已经试过这还有:
<ItemTemplate>
<asp:Label ID="REPRESENTATION_TYPE" runat="server" Visible='<%# (string)Eval("FTP_MODE") == "FTP" ? true: false%>'
Text='<%# Bind("REPRESENTATION_TYPE") %>'></asp:Label>
</ItemTemplate>
UPDATE
我没有提供足够的信息。我想隐藏整个Field。包括标题,项目/编辑/插入模板和任何子控件。我上面的内容隐藏了单个控件而不是整个字段。 不幸的是,我不能做到这一点:
<TemplateField Visible='<%# boolValue %>' >...Stuff...</TemplateField>
,因为模板列不绑定。
基本上,我想等价的:
DetailsView1.Fields[15].Visible = false;// 15 is the index of the field I want hidden
以最有效的和可扩展的方式我可以做到这一点。这种形式在未来几乎肯定会发生变化,我不希望有人必须回头找出需要动态显示或隐藏的所有20多个字段的索引。
什么意思是“它似乎并没有工作”?你会得到什么结果? – ConnorsFan
它只显示所有的字段,不管布尔值如何。 –