2010-07-18 1 views
1

Pour ASP.NET, j'utilise une vue DetailsView pour l'insertion et la modification d'un enregistrement. Pour le mode édition, je ne souhaite pas afficher le champ de la clé primaire, car il ne doit pas être modifié. Pour le mode insertion, je veux afficher le champ clé primaire car il n'existe pas et l'utilisateur peut le spécifier via un DropDownList qui assure qu'ils choisiront une valeur unique. Un TemplateField est utilisé dans le balisage DetailsView pour le champ clé primaire (d'où DropDownList pour le mode insertion).Détails ASP.NET Affichage de l'affichage du champ de modification pour les versets d'édition mode insertion

Mon problème est que je ne peux pas obtenir le champ de clé primaire pour ne pas afficher pour le mode d'édition et afficher pour le mode d'insertion. Dans le balisage je:

<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> 

Avec la TemplateField Visible = « true », le HeaderText = « nom » affiche toujours que je ne veux pas pour le mode d'édition. Avec le TemplateField Visible = "False", le champ ne montre jamais ce que je ne veux pas pour le mode insertion.

Comment puis-je obtenir le comportement d'affichage que je souhaite pour le mode d'édition insertion vers vers. Je suis d'accord avec la modification de certaines propriétés par programme plutôt que de s'appuyer sur une approche de balisage pur, mais je ne peux pas trouver la solution.

S'il vous plaît aviser!

Répondre

1

Vous pouvez tester le mode d'affichage détaillé et voir s'il est en mode -Edit-. Vous pouvez ensuite masquer DropDownList par programmation.

if (myDetailsView.CurrentMode == DetailsViewMode.Edit) 
{ 
    DropDownList ddl2NonMembers = (DropDownList)myDetailsView.FindControl("ddl2NonMembers"); 
    ddl2NonMembers.Visible = false; 
} 

De même, vous pouvez masquer la colonne entière, mais vous devez connaître l'index de cette colonne. index de colonne En supposant est # 5, vous pouvez faire quelque chose comme:

if (myDetailsView.CurrentMode == DetailsViewMode.Edit) 
{ 
    myDetailsView.Columns[5].Visible = false; 
} 

Et enfin, vous pouvez créer une fonction dans le code-behind qui vérifie la valeur actuelle du DetailsView et l'affecter à la propriété Visible de votre champ Modèle :

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

Et dans votre champ modèle:

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

je devais basculer si l'ensemble de la colonne peut être visible, donc je suis allé avec la deuxième option, mais je devais utiliser myDetailsView.Fiel ds [5] .Visible = false (le balisage a le TemplateField dans une balise , est pour GridView). – harrije

+0

Désolé je n'ai pas testé cela dans VS, oui c'est la collection Fields. Mon mauvais :) – Marko

+0

Je ne connaissais pas la propriété InsertVisible. Celui-ci a fonctionné pour moi, je l'ai transformé en Faux. +1 – Brabbeldas

Questions connexes