Jeppe
Jeppe

Reputation: 11

Show picture in 30 days ASP.NET

I am trying to make my first public .net website but I have a little problem. It's a webshop, where i want to show at new product picture, if the product is not older than the current date with more than 30 days?

Markup:

 <asp:Repeater ID="rptProducts" runat="server">        
        <ItemTemplate>
            <table cellpadding="5" cellspacing="5" class="tblSales">
                <tr>
                    <td>
                        <h3>
                            <asp:Label ID="Label1" Text='<%#Eval("ProductName")%>' runat="server" /></h3>
                        <h2>
              <a  href='<%# "Products.aspx?ID=" + Eval("ProductID") %>'>Read More</a></h2>
                    </td>
                    <td >
                        <h4>
                            <asp:Label ID="Label2" Text='<%#Eval("ProductPrice")%>' runat="server" />,-</h4>      
                            <div> 
<img alt="New product" src="images/NewProduct.png" /><!--This picture should show in 30 days-->
                              </div> 
                    </td>
                </tr>
                <hr />
            </table>
        </ItemTemplate>
</asp:Repeater>

Code-behind:

public partial class sale : System.Web.UI.Page
{
    ProductsTableAdapter p = new ProductsTableAdapter();

    protected void Page_Load(object sender, EventArgs e)
    {
        GetData();
    }

    protected void GetData()
    {
        rptProducts = p.GetProductsByCategoryID(3);
        rptProducts();        
    }
}

Upvotes: 1

Views: 421

Answers (2)

Jeppe
Jeppe

Reputation: 11

Many thanks, I find out how to make it :)thanks to you, quite simple but i works. here is the code I made:

 <asp:Image ID="Image2" ImageUrl="~/images/new.png" Visible='<%#GetProductSalesPic(Eval("ProductDate"))%>' runat="server" />  

C# code:

protected bool GetProductSalesPic(object Date)
    {
        DateTime actDate = (DateTime)Date;
        if (DateTime.Now.AddDays(-30) < actDate)
        {
            return true;
        }
        else
        {
        return false;
        }
    } 

And again, Thanks You, for the fast and good response :D

Upvotes: 0

Paul Sullivan
Paul Sullivan

Reputation: 2875

EDITED: As a user noted this may be a misinterpretation so...

IF you want to filter items that were added and not display them at all use the following LINQ expression on the GetData method:

rptProducts = p.GetProductsByCategoryID(3).Where(p=>p.ProductAddedDate > DateTime.Now.AddDays(-30));

you need to have a property (in the above example I added a DateTime ProductAddedDate to the product class

IF you want to not show the image based on the date BUT show everything else you could:

In the ItemDataBound event of the repeater you can set asp control (replace static html with asp:Image which allows you to control display using the Visible property i.e.

<asp:Repeater ID="rptProducts" runat="server" OnItemDataBound="rptProducts_Databound">        
        <ItemTemplate>
            <table cellpadding="5" cellspacing="5" class="tblSales">
                <tr>
                    <td>
                        <h3>
                            <asp:Label ID="Label1" Text='<%#Eval("ProductName")%>' runat="server" /></h3>
                        <h2>
              <a  href='<%# "Products.aspx?ID=" + Eval("ProductID") %>'>Read More</a></h2>
                    </td>
                    <td >
                        <h4>
                            <asp:Label ID="Label2" Text='<%#Eval("ProductPrice")%>' runat="server" />,-</h4>      
                            <div> 
<asp:Image ID="ProdImg" runat="server" AlternativeText="New product" ImageUrl='<%# "~/images/" + Eval("ImageFileName")' Visible="True"/><!--This picture should show in 30 days-->
                              </div> 
                    </td>
                </tr>
                <hr />
            </table>
        </ItemTemplate>
</asp:Repeater>

CS codebehind

protected void rptProducts_Databound(object sender, RepeaterItemEventArgs e)
{
    var imgCtrl = (Image)e.Item.FindControl("ProdImg");
    var dataItem = (Product)e.Item.DataItem;
    imCtrl.Visible = dataItem.ProductAddedDate > DateTime.Now.AddDays(-30);
}

Upvotes: 5

Related Questions