Ich habe eine DetailsView, die Vorlagenfelder verwendet. Was ich möchte, ist, wenn ein Feldwert "FTP" ist, zeigt es die Felder an, die sich auf FTP beziehen, andernfalls zeigt es die Felder an, die sich auf SFTP beziehen.So können Sie Vorlagenfelder in DetailsView dynamisch ausblenden
Ich habe die SO Frage und Antwort here gelesen. Es scheint jedoch nicht zu funktionieren. Ich habe versucht, die Variable zu ändern, bevor und nachdem ich meine DetailsView databind. Könnte jemand darauf hinweisen, was ich falsch mache?
Auch ich muss dies mit ungefähr 20 Feldern auf dieser Seite allein tun, also versuche ich, die jemals komplexe Schleifenstruktur mit FindControl() zu vermeiden.
Hier ist ein Teil meines Codes.
<ItemTemplate>
<asp:Label ID="REPRESENTATION_TYPELBL" runat="server" Visible='<%# showFTP %>'
Text='<%# Bind("REPRESENTATION_TYPE") %>'></asp:Label>
</ItemTemplate>
-Code Behind:
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;
}
}
EDIT
Ich habe jetzt dies auch versucht:
<ItemTemplate>
<asp:Label ID="REPRESENTATION_TYPE" runat="server" Visible='<%# (string)Eval("FTP_MODE") == "FTP" ? true: false%>'
Text='<%# Bind("REPRESENTATION_TYPE") %>'></asp:Label>
</ItemTemplate>
UPDATE
Ich habe nicht genug Informationen zur Verfügung gestellt. Ich möchte das gesamte Feld verstecken. Dazu gehören die Kopfzeile, Element/Bearbeiten/Vorlage einfügen und alle untergeordneten Steuerelemente. Was ich oben habe funktioniert, um einzelne Steuerelemente zu verstecken, aber nicht das gesamte Feld. Leider , ich kann nicht einfach tun:
<TemplateField Visible='<%# boolValue %>' >...Stuff...</TemplateField>
weil Template nicht bindable.
Grundsätzlich möchte ich das Äquivalent von:
DetailsView1.Fields[15].Visible = false;// 15 is the index of the field I want hidden
auf die effizienteste und skalierbare Art, wie ich es tun kann. Diese Form wird sich sicherlich in der Zukunft ändern, und ich möchte nicht, dass jemand zurückgehen muss und den Index aller 20+ Felder herausfinden muss, die dynamisch gezeigt oder versteckt werden müssen.
Was meinst du genau mit "es scheint nicht zu funktionieren"? Welches Ergebnis bekommst du? – ConnorsFan
Es zeigt nur alle Felder unabhängig vom booleschen Wert an. –