如果在转发器中声明

时间:2010-11-19 05:37:45

标签: c# asp.net

我的页面上有this转发器。在默认列下我想要的就是那里  应该是一个IF条件,检查我的表的“IsDEfault”字段值。 如果IsDefault = True,那么“label1”下面的标签即“是” 显示在转发器内,否则应显示“Make DEfault”链接..

现在如何在转发器中将此IF语句作为内联代码包含在内,以实现我的目的?

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

我有个主意: -

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

我现在该如何形成“然后”声明? 请帮助我正确的语法..thnx 我是否需要制作一个方法来检查“IsDefault”是否为真,然后在我的转发器中的内联代码中调用它?我该怎么做呢?

[编辑]

我尝试如下: -

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

没有工作:(帮助!!

3 个答案:

答案 0 :(得分:4)

如果您希望某些控件仅在某些条件下可见,请根据该条件设置Visible属性:

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

修改
如果您希望控件INvisible用于“IsDefault”情况,请使用Visible="<%# DataBinder.Eval(Container.DataItem,"IsDefault")==False %>"之类的内容反转测试。 我不太确定确切的语法,但你应该明白这一点。

答案 1 :(得分:3)

这是你的转发器标记。请注意,两个控件都在开头隐藏:

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

还有一些代码可以使用它。注意我已经模拟了你的blluser对象集合的检索,所以有一些额外的代码与你有关,你不需要,因为你绑定的bllusers集合可能来自db或什么?

无论如何,我这就是你要找的东西,但如果不是,请告诉我; - )

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

希望这会有所帮助: - )

答案 2 :(得分:1)

很抱歉,说实话,我无法理解你想要做什么 如果您希望使用Item Templet中的条件,那么我认为 以下systax将帮助您

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