7 votes

Si déclaration dans le répétiteur

J'ai este Sous la colonne par défaut, ce que je veux, c'est qu'il y ait une condition IF qui vérifie le "IsDEfa" de ma table. une condition IF qui vérifie la valeur du champ "IsDEfault" de ma table. Si IsDefault=True, alors l'étiquette sous "label1", c'est-à-dire "Oui", doit être affichée dans le répéteur. affiché dans le répéteur, sinon le lien "Make DEfault" doit être affiché

Maintenant, comment puis-je inclure cette déclaration IF en tant que 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 formuler l'énoncé "Ensuite" maintenant ? S'il vous plaît aidez-moi avec la syntaxe appropriée..thnx Dois-je créer une méthode qui vérifie si "IsDefault" est vrai ou non, puis l'appeler dans le code en ligne de mon répéteur ? Comment dois-je m'y prendre ?

[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>")
)%>

n'a pas fonctionné :( Aide ! !!

4voto

Hans Kesting Points 17043

Si vous voulez qu'un contrôle ne soit visible que sous certaines conditions, définissez la propriété Visible en fonction de ces conditions :

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

EDIT
Si vous voulez que le contrôle soit INvisible dans le cas de "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.

3voto

5arx Points 3985

Voici le balisage de votre répétiteur. Remarquez que 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 quelques codes pour aller avec. Notez que j'ai simulé la récupération de votre collection d'objets bllusers, il y a donc un peu de code supplémentaire relatif à cela dont vous n'aurez pas besoin car, vraisemblablement, la collection bllusers à laquelle vous vous liez provient d'une base de données ou autre ?

De toute façon, je pensez à c'est ce que vous recherchez, mais faites-moi savoir si ce n'est pas le cas ;-)

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

J'espère que cela vous aidera :-)

2voto

Nitesh Katare Points 525

Désolé de vous dire que pour être honnête, je n'ai pas pu comprendre ce que vous vouliez faire. Si vous cherchez à utiliser la condition dans l'Item Templet alors je pense que le système suivant vous aidera

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X