Go Premium for a chance to win a PS4. Enter to Win

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

userfulness indicator Asp.net using Vb Code

I am trying to create a usefulness indicator on a page in asp.net using vb code behind. I have my reviews displaying in repeater control which has paging enabled. I have included two buttons to the end of the repeater one for Yes and the other No. I want to keep a count of how many times yes was clicked for that review and how many times no was clicked. By adding the yes count and no count together I can get the total. I can access the buttons but when I click them nothing happens. Would anyone be able to help? I've been trying to do this for hours and I can't find a solution. Below is the code I have used for both the paging and the attempt for the indicator.

Markup Code:
<asp:Repeater ID="movies" runat="server" onItemCommand="movies_ItemCommand">
        <ItemTemplate>
            <table width="641px">
                <tr>
                    <td>
                        <span style="font-weight:bold;font-size:16px;">
                        <%# Container.DataItem("MovieTitle")%>
                            </span>
                    </td>
                    <td>
                        <span style="float:right;">
                        <asp:Image ID="Image1" runat="server" ImageUrl = '<%# Eval("Total")%>' style="width:80px;height:14px;"/>
                       </span>
                    </td>
                </tr>
                <tr>
                    <td colspan="2">
                        <hr style="height:1px;border-bottom:none;color:#e3e3e3;"/>
                    </td>
                </tr>
                </table>
            <table width="641px">
                <tr>
                    <td>
                        <asp:Image ID="Image2" runat="server" ImageUrl = '<%# Eval("MovieImageFileName")%>' style="width:180px;height:108px;border:1px solid #e3e3e3;"/>
                    </td>
                    <td style="vertical-align:top;">
                        <%# Container.DataItem("ReviewText")%>
                    </td>
                </tr>
                </table>
            <table width="641px">
                
                <tr>
                    <td>
                      Value for Money:
                    </td>
                    <td>
                        <asp:Image ID="Image3" runat="server" ImageUrl ='<%# Eval("ValueForMoney")%>' style="width:80px;height:14px;"/>
                    </td>
                </tr>
                <tr>
                    <td>
                        Acting Ability: 
                    </td>
                    <td>
                        <asp:Image ID="Image4" runat="server" ImageUrl ='<%# Eval("ActingAbility")%>' style="width:80px;height:14px;"/>
                    </td>
                </tr>
                <tr>
                    <td>
                        Special Effects:
                    </td>
                    <td>
                        <asp:Image ID="Image5" runat="server" ImageUrl ='<%# Eval("SpecialEffects")%>' style="width:80px;height:14px;"/>
                    </td>
                </tr>
                <tr>
                    <td>
                        Plot:
                    </td>
                    <td>
                        <asp:Image ID="Image6" runat="server" ImageUrl ='<%# Eval("Plot")%>' style="width:80px;height:14px;"/>
                    </td>
                </tr>
                </table>
            <table width="441px">
                <tr>
                    <td>
                        Reviewed By:
                    </td>
                    <td>
                        <%# Container.DataItem("Username")%>
                    </td>
                    <td>|</td>
                    <td>
                        <%# Container.DataItem("ReviewDate")%>
                    </td>
                    <td>|</td>
                    <td>
                        <%# Container.DataItem("ReviewerType")%> Review
                    </td>
                </tr>
                <tr>
                    <td colspan="6">
                        Did you find this review helpful?&nbsp;&nbsp;&nbsp;<asp:Button ID="btnYes" runat="server" Text="Yes" />&nbsp;&nbsp;
                        <asp:Button ID="btnNo" runat="server" Text="No" /><br />
                        <asp:Label ID="lblResults" runat="server" Text="Total"></asp:Label>
                    </td>
                </tr>
                <tr>
                    <td colspan="6">
                        <hr style="height:1px;border-bottom:none;color:#e3e3e3;"/>
                    </td>
                </tr>
            </table>
        </ItemTemplate>
    </asp:Repeater>

Open in new window


VB Code Behind
 
Dim total As Integer
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
        doPaging()
    End Sub

 Function getTheData() As DataTable
        Dim DS As New DataSet()
        Dim strConnect As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source = " & _
        Server.MapPath("/App_Data/MovieBoard.accdb"))
        Dim objOleDBAdapter As New OleDbDataAdapter("Select MovieTitle, MovieImageFileName, ReviewText, ValueForMoney, ActingAbility, SpecialEffects, Plot, Total, Username, ReviewDate, ReviewerType From Movies, MovieReviews, MReviewRatings, MReviewTexts, UserDetails, ReviewerType WHERE Movies.MovieID = MovieReviews.MovieID AND MovieReviews.MReviewID = MReviewRatings.MReviewID AND MovieReviews.MReviewID = MReviewTexts.MReviewID AND MovieReviews.UserID = UserDetails.UserID AND MovieReviews.ReviewerTypeID = ReviewerType.ReviewerTypeID AND ReviewerType.ReviewerTypeID = 1", strConnect)
        objOleDBAdapter.Fill(DS, "Movies")

        Return DS.Tables("Movies").Copy
    End Function

Sub doPaging()
        pagedData.DataSource = getTheData().DefaultView
        pagedData.AllowPaging = True
        pagedData.PageSize = 1

        Try
            pagedData.CurrentPageIndex = Int32.Parse(Request.QueryString("Page")).ToString()
        Catch ex As Exception
            pagedData.CurrentPageIndex = 0
        End Try

        btnPrev.Visible = False
        btnNext.Visible = False

        If Not pagedData.IsFirstPage Then
            btnPrev.PostBackUrl = Request.CurrentExecutionFilePath + _
                                           "?Page=" + CStr(pagedData.CurrentPageIndex - 1)
        End If

        If Not pagedData.IsLastPage Then
            btnNext.PostBackUrl = Request.CurrentExecutionFilePath + _
                                           "?Page=" + CStr(pagedData.CurrentPageIndex + 1)
        End If

        pageNumber.Text = (pagedData.CurrentPageIndex + 1) & " of " & pagedData.PageCount

        movies.DataSource = pagedData
        movies.DataBind()
    End Sub

Protected Sub movies_ItemCommand(source As Object, e As RepeaterCommandEventArgs) Handles movies.ItemCommand
        Dim yCount As Integer
        yCount = 0
        Dim nCount As Integer
        nCount = 0
        If e.Item.ItemType = ListItemType.Item Or e.Item.ItemType =
        ListItemType.AlternatingItem Then
            Dim btnYes As Button = CType(e.Item.FindControl("btnYes"), Button)
            Dim btnNo As Button = CType(e.Item.FindControl("btnNo"), Button)
            Dim lblResults As Label = CType(e.Item.FindControl("lblResults"), Label)
            Dim sArgument As String = CType(e.Item.DataItem, 
                     DataRowView).Row.Item("MovieTitle").ToString
            If btnYes.OnClientClick Then
                yCount = yCount + 1
                MsgBox(yCount)
                lblResults.Text = yCount
            ElseIf btnNo.OnClientClick Then
                nCount = nCount + 1
            End If
            total = yCount + nCount

        End If
        MsgBox(total)
    End Sub

Open in new window

0
memecece
Asked:
memecece
  • 6
  • 5
1 Solution
 
Roopesh ReddyCommented:
Hi,

Why don't you keep the Yes and No buttons out of the Repeater Control?

You can always have a button and handle the OnClick event of the button!

Hope it helps u...
0
 
memececeAuthor Commented:
Hi roopesshreddy,

I had thought about that but then the button would only take a user click on one page. I need the buttons to be inside the repeater so that when the paging new yes/no buttons are available for a new review. Hope that makes sense
0
 
Roopesh ReddyCommented:
Hi,

Yeah! In that scenario,  you can reset the count on the Page Index Change right!

You can do the following -

1. Keep the Buttons outside of the Repeater control.
2. Handle the OnClick event.
3. Capture the reviews.
4. On Page Index change event, clear the previous reviews and hold the new one's

Hope it helps u...
0
What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

 
memececeAuthor Commented:
Thank you :) It helps a lot. Just one more question how do I go about clearing the previous reviews? Sorry I only started using asp.net about 5 weeks ago so I'm still learning
0
 
Roopesh ReddyCommented:
Hi,

How you are storing the review?
Are you using Sessions? If yes, then make it to NULL and re assign new values!
 If you are using the variables, then assign them to 0!

It totally depends on the way you are holding the data. In any case, make the values to 0 or NULL and you are done!

Hope it helps u...
0
 
memececeAuthor Commented:
Thanks :) As I am using a repeater control I will need to find the equivalent to pageIndexChanging for that control - I'm pretty sure the repeater does not have this functionality.  Thanks for help
0
 
Roopesh ReddyCommented:
Hi,

Check this article for Paging in Repeater control - http://www.4guysfromrolla.com/articles/081804-1.aspx

Hope it helps u...
0
 
memececeAuthor Commented:
Great thank you :) I got it working. You wouldn't by any chance know how I would be able to get the amount of data visible on each page to change depending on the number of reviews for a particular movie? For example for the Hobbit there might be 4 reviews but for Rise of the Guardians there is 3. This would mean that the page size would be 4 for the hobbit and change to 3 for the second movie. I have a function written that I call when determining my pagesize but it doesn't seem to change the size
0
 
Roopesh ReddyCommented:
Hi,

Good Stuff!

Is everything OK now?
0
 
memececeAuthor Commented:
For that yes :)  Would you be able to suggest a solution for my other problem? - The page size issue?
0
 
Roopesh ReddyCommented:
Hi,

Close this question and raise new one!
0

Featured Post

Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

  • 6
  • 5
Tackle projects and never again get stuck behind a technical roadblock.
Join Now