Learn how to a build a cloud-first strategyRegister Now

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 15751
  • Last Modified:

IF condition in ASP.NET DataList

New to ASP.NET and programming in VB. I was wondering what is the easiest way to put IF condtions in DataLists? Look at the example below. The 'Online Price' is not always valid and neither is the 'Save 10%' (or whatever percentage) so I need to know aside, from not displaying data item, how I would go about in a DataList hiding the HTML code as well?

I tried a IF statement like in classic ASP but I think I may be stumbling on the syntax. Something along the lines of

<%IF DataBinder.Eval(Container.DataItem, "DISCOUNT") <> 0  THEN%>
<%END IF%>

PLEASE HELP!

<asp:DataList class="MainText" id="NewList" runat="server" CellSpacing="2" CellPadding="2" width="100%">
                                    <ItemTemplate>
                                        <tr valign="top">
                                            <td class="Listing">
                                                <a href="bookdetails.aspx?ISBN=<%# DataBinder.Eval(Container.DataItem, "ISBN") %>"><img src="http://www.kogan-page.co.uk/images/<%# DataBinder.Eval(Container.DataItem, "ISBN") %>.jpg" class="BookImage" width="60"></a></td>
                                            <td class="Listing">
                                                <p>
                                                    <a href="bookdetails.aspx?ISBN=<%# DataBinder.Eval(Container.DataItem, "ISBN") %>"><strong><%# DataBinder.Eval(Container.DataItem, "Title") %></strong></a>
                                                    <br />
                                                    <%# DataBinder.Eval(Container.DataItem, "Subtitle") %>
                                                    <br />
                                                    <span class="SmallText"> Author: <a href=""><%# DataBinder.Eval(Container.DataItem, "Author") %></a>
                                                    <br />
                                                    ISBN: <%# DataBinder.Eval(Container.DataItem, "ISBN") %>
                                                    <br />
                                                    Binding: <%# DataBinder.Eval(Container.DataItem, "Binding") %>
                                                    <br />
                                                    Publication Date: <%# DataBinder.Eval(Container.DataItem, "PublicationDate") %> </span>
                                                </p>
                                                <p class="SmallText">
                                                    <a href="bookdetails.aspx?ISBN=<%# DataBinder.Eval(Container.DataItem, "ISBN") %>">More
                                                    Details</a>
                                                </p>
                                            </td>
                                            <td class="Listing">
                                                <p>
                                                    <strong>Online Price: <span class="RedText"></span></strong>
                                                    <br />

                                                    Published Price: <span class="StrikeText"><%# DataBinder.Eval(Container.DataItem, "Price") %></span>

                                                    <br />
                                                    Save 10%

                                                </p>
                                                <p>
                                                    <a href=""><img src="images/addtobasket.gif" alt="" width="100" height="19" border="0" class="BookImage" /></a>
                                                </p>
                                            </td>
                                        </tr>
                                    </ItemTemplate>
                                </asp:DataList>
0
RayBanUK
Asked:
RayBanUK
  • 3
  • 2
2 Solutions
 
gspronychCommented:
I would solve your problem in the codebehind, you can do it like this.
You will have to adjust the code to how your discount and price values are stored (string or int)

Put this code in your HTML page
<%# ReturnDiscount(Container.DataItem("DISCOUNT"),Container.DataItem("Price"))%>

Put this function in your codebehind
    Function ReturnDiscountPrice(ByVal intdiscount As interger, ByVal intprice As interger)
        dim intnewprice
        intnewprice = intprice

        if intdiscount <> 0 then
             intprice = intprice * intdiscount
        end if

        Return intprice

    End Function

Cheers
0
 
RayBanUKAuthor Commented:
Thanks I have consider the above option but I need to hide/unhide the html as well. For instance, if there is a discount say "Special Price" and "Save x%".
0
 
gspronychCommented:
What is the condition to hide/unhide a row?

Do you want to only show the row when their is a valid discount?
0
Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
RayBanUKAuthor Commented:
Yes basically the following bit of code

<strong>Online Price: <span class="RedText"><%# DataBinder.Eval(Container.DataItem, "DiscountPrice") %></span></strong>
<br />
Published Price: <span class="StrikeText"><%# DataBinder.Eval(Container.DataItem, "Price") %></span>
<br />
Save <%# DataBinder.Eval(Container.DataItem, "Discount") %>%

I want the 'Online Price' and 'Save %' not be displayed if no discount.

Traditionally in classic ASP I would have done something like

<%if Discount <> 0 then%>
Online Price: <span class="RedText"><%=rs("DiscountPrice")%></span><br>
<%end if%>
Published Price: <%=rs("Price")%><br>
<%if Discount <> 0 then%>
Save <%=rs("Discount")%> %
<%end if%>

Just trying to find out how to do similar in a datalist.
0
 
gspronychCommented:
Ok, I would modify the code as below, and declare a protected variable in your code behind

Protected strDiscountinfo As String

    Function ReturnDiscountPrice(ByVal intdiscount As interger, ByVal intprice As interger)
        dim intnewprice
        intnewprice = intprice

        if intdiscount <> 0 then
             intprice = intprice * intdiscount
             strDiscountinfo = "Online price $" & intprice & " Save %" & intdiscount
'set the discount text if a discount exists
        else
             strDiscountinfo = ""
'empty the discount text if no discount exists
        end if

        Return intprice

    End Function

And use this in your HTML page

<%# ReturnDiscount(Container.DataItem("DISCOUNT"),Container.DataItem("Price"))%>
<% response.write(strDiscountinfo) %>
'the strDiscountinfo variable will be available to the HTML page since the variable is form protected

This should be a good start
0
 
ajitanandCommented:
hello,

Here is my approach if you really want to use the If Then kind of system as INLINE in your ASPX Code.

---------------------------------------------
<%# Iif( DataBinder.Eval(Container.DataItem, "DiscountPrice") = 0, "", "<strong>Online Price: <span class=""RedText"">" + DataBinder.Eval(Container.DataItem, "DiscountPrice").ToString() + "</span></strong><br />" %>

Published Price: <span class="StrikeText"><%# DataBinder.Eval(Container.DataItem, "Price") %></span>
<br />

<%# Iif( DataBinder.Eval(Container.DataItem, "Discount") = 0, "", "Save: " + DataBinder.Eval(Container.DataItem, "Discount").ToString() & "%" %>

------------------------------------------
This use of IIF Stamement is quite flexible, and can help you in a lot of situations.


Tip: Instead of using DataBinder.Eval, use something like:
<%# CType(Container.DataItem, DataRowView)("columnName") %>

It is MUCH (reallu much!!!) faster than DataBinder.Eval, which uses reflection during databinding.


Hope this helps.

warm regards,
Ajit Anand
0

Featured Post

Prep for the ITIL® Foundation Certification Exam

December’s Course of the Month is now available! Enroll to learn ITIL® Foundation best practices for delivering IT services effectively and efficiently.

  • 3
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now