2010-11-19 12 views
7

J'ai répéteur this sur ma page .. Sous la colonne par défaut ce que je veux, c'est que devrait être une condition IF qui vérifie la valeur de champ "IsDEfault" de ma table. Si IsDefault = True alors le lable ci-dessous « label1 » ie « Oui » doit être affiché à l'intérieur du répéteur autre lien « Définir par défaut » doit être affiché ..Si l'instruction dans le répéteur

Maintenant, comment puis-je inclure cette instruction IF code en ligne dans mon répéteur pour accomplir ce que je veux?

<asp:LinkButton ID="lnk1" Text="Make Default" CommandName="SetDefault" runat="server" Visible="True" CommandArgument='<%#Eval("UserID") %>' CausesValidation="false"></asp:LinkButton> 

<asp:Label ID="label1" Text="Yes" runat="server" Visible="False"></asp:Label> 

J'ai une idée: -

<%# If DataBinder.Eval(Container.DataItem,"IsDefault") = "True" 
Then%> 
<%End If%> 

Comment dois-je faire la déclaration "Alors" maintenant? S'il vous plaît aidez-moi avec la syntaxe correcte .. thnx Ai-je besoin de faire une méthode qui vérifie si "IsDefault" est vrai ou non, puis l'appeler dans le code inline dans mon répéteur? Comment je vais y aller?

[EDIT]

J'ai essayé comme suit: -

<% If (Eval("Container.DataItem,"IsDefault"")="True"? 

("<asp:LinkButton ID="lnk1" Text="Set as Default" CommandName="SetDefault1" runat="server" CommandArgument='<%#Eval("User1ID") %>' 
CausesValidation="false" Visible=true></asp:LinkButton>") : ("<asp:Label ID="label1" Text="Yes" runat="server" Visible=true></asp:Label>") 
)%> 

travail :(Aide na pas !!

+0

pourquoi le faire en ligne? Tu rends la vie plus difficile qu'elle ne doit l'être. faites-le simplement dans l'événement itemdatabound dans le code-behind. – RPM1984

+0

@ RPM..Comment puis-je faire cela? Pouvez-vous donner un exemple, un pseudo code ou quelque chose? thnx – Serenity

+0

@ 5arx :: J'ai mis cet attribut dans mon répéteur OnItemDataBound = "rpt1_ItemDataBound" ... ça ne marche pas ... plz trouver mon code de répéteur ici :: http: // stackoverflow.com/questions/4213594/itérer-par-répéteur – Serenity

Répondre

3

Voici le balisage de votre répéteur. Remarquez les deux contrôles sont cachés au début:

<asp:Repeater runat="server" ID="rpt1" OnItemDataBound="rpt1_ItemDataBound" onitemcommand="rpt1_ItemCommand"> 
    <ItemTemplate> 
     <p> 
      ID: <%# Eval("Id") %> 
      IsDefault: <%# Eval("IsDefault") %> 
      Name: <%# Eval("Name") %> 

      <asp:Label BackColor="Blue" ForeColor="White" runat="server" ID="lDefault" Text="DEFAULT" Visible="false" /> 

      <asp:Button runat="server" ID="btnMakeDefault" Text="Make Default" Visible="false" CommandArgument='<%# Eval("Id") %>' /> 
     </p> 
    </ItemTemplate> 
</asp:Repeater> 

Et du code pour l'accompagner. Remarque J'ai simulé la récupération de votre collection d'objets blluser, donc il y a du code supplémentaire relatif à ceci que vous n'aurez pas besoin, probablement la collection de bllusers à laquelle vous vous liez vient d'un db ou quelque chose?

Quoi qu'il en soit, je pense que c'est ce que vous cherchez, mais laissez-moi savoir si ce ne est pas ;-)

//Dummy object for illustrative purposes only. 
[Serializable] 
public class bllUsers 
{ 
    public int Id { get; set; } 
    public bool isDefault { get; set; } 
    public string Name { get; set; } 

    public bllUsers(int _id, bool _isDefault, string _name) 
    { 
     this.Id = _id; 
     this.isDefault = _isDefault; 
     this.Name = _name; 
    } 
} 

protected List<bllUsers> lstUsers{ 
    get 
    { 
     if (ViewState["lstUsers"] == null){ 
      ViewState["lstUsers"] = buildUserList(); 
     } 
     return (List<bllUsers>)ViewState["lstUsers"]; 
     } 
     set{ 
      ViewState["lstUsers"] = value; 
     } 
    } 


protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     buildGui(); 
    } 
} 

private List<bllUsers> buildUserList(){ 
    lstUsers = new List<bllUsers>(); 
    lstUsers.Add(new bllUsers(1, false, "Joe Bloggs")); 
    lstUsers.Add(new bllUsers(2, true, "Charlie Brown")); 
    lstUsers.Add(new bllUsers(3, true, "Barack Obama")); 

    return lstUsers; 
} 

private void buildGui() 
{ 
    rpt1.DataSource = lstUsers; 
     rpt1.DataBind(); 
} 

protected void rpt1_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
    { 
     bllUsers obj = (bllUsers)e.Item.DataItem;//this is the actual bllUser the row is being bound to. 

     //Set the labels 
     ((Label)e.Item.FindControl("ldefault")).Visible = obj.isDefault; 
     ((Button)e.Item.FindControl("btnMakeDefault")).Visible = ! obj.isDefault; 

     //Or use a more readable if/else if you want: 
     if (obj.isDefault) 
     { 
      //show/hide  
     } 
     else 
     { 
      //set visible/invisible 
     } 
    } 
} 

Hope this helps :-)

1

Désolé de vous dire pour être honnête, je suis incapable de comprendre ce qui fait que vous Je voulais faire Si vous cherchez à utiliser la condition dans le point Templet alors je pense la SYSTAX suivante vous aidera

<asp:LinkButton ID="Label1" runat="server" 
Text='<%# ((Eval("Cond"))="True" ? Eval("Result for True") : Eval("Result for False"))%>'></asp:LinkButton> 
4

Si vous voulez un certain contrôle soit visible que sur une certaine condition, définissez la propriété Visible selon cette condition:

<asp:Label ID="label1" Text="Yes" runat="server" 
    Visible="<%# DataBinder.Eval(Container.DataItem,"IsDefault") %>" /> 

EDIT
Si vous souhaitez que le contrôle INVISIBLE de la situation "IsDefault" , inversez le test avec quelque chose comme Visible="<%# DataBinder.Eval(Container.DataItem,"IsDefault")==False %>". Je ne suis pas tout à fait sûr de la syntaxe exacte, mais vous devriez avoir l'idée.

+0

ok vais essayer this..thnx – Serenity

+0

ok j'ai essayé that..now ce qui se passe est que ... BOTh lable et LinkButton ie "Make Default" lien et "Oui" étiquette sont affichés sous col de répéteur .. Je veux onl l'un de ces 2 à afficher à la fois ... Comment vérifier si "IsDefault" = true, afficher YES label sinon afficher ce bouton Link – Serenity

Questions connexes