ASP.NET - Ajax Rating System Codebehind
Jeg har et problem med et rating system baseret på Ajax.På min aspx ligger min rating i en repeater:
<asp:Repeater ID="Repeater1" runat="server" DataSourceID="SqlDataSource1">
<HeaderTemplate>
<h1>Bedst Bedømte</h1>
<hr />
</HeaderTemplate>
<SeparatorTemplate>
<br />
<hr />
<br />
</SeparatorTemplate>
<ItemTemplate>
<asp:Label ID="ProduktNavnLabel" runat="server"
Text='<%# Eval("ProduktNavn") %>' />
<br />
<asp:Image ImageUrl='<%# Eval("ImageURL") %>' runat="server" />
<br />
ProduktPris:
<asp:Label ID="ProduktPrisLabel" runat="server"
Text='<%# Eval("ProduktPris") %>' />
<br />
ProduktRating:
<asp:Rating ID="ratingControl" runat="server" OnChanged="RatingControlChanged" FilledStarCssClass="FilledStar" EmptyStarCssClass="EmptyStar" AutoPostBack="True" ReadOnly="False" StarCssClass="Star" WaitingStarCssClass="FilledStar" CurrentRating="2">
</asp:Rating>
<b> <asp:label ID="lbltxt" runat="server"/> </b>
<br />
</ItemTemplate>
</asp:Repeater>
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:CharcuteriConnectionString %>"
SelectCommand="SELECT TOP (3) ProduktID, ProduktNavn, ImageURL, ProduktPris, Rate FROM Produkter ORDER BY Rate DESC">
</asp:SqlDataSource>
Hele min CodeBehind ser ud som følgende:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using AjaxControlToolkit;
public partial class MasterPage : System.Web.UI.MasterPage
{
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["CharcuteriConnectionString"].ConnectionString);
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindRatingControl();
}
}
protected void RatingControlChanged(object sender, AjaxControlToolkit.RatingEventArgs e)
{
Rating ratingControl = (Rating)Repeater1.FindControl("ratingControl");
con.Open();
SqlCommand cmd = new SqlCommand("insert into Produkter(Rate)values(@Rating)", con);
cmd.Parameters.AddWithValue("@Rating", ratingControl.CurrentRating);
cmd.ExecuteNonQuery();
con.Close();
BindRatingControl();
}
protected void BindRatingControl()
{
Rating ratingControl = (Rating)Repeater1.FindControl("ratingControl");
Label lbltxt = (Label)Repeater1.FindControl("lbltxt");
int total = 0;
int average = 0;
DataTable dt = new DataTable();
con.Open();
SqlCommand cmd = new SqlCommand("Select Rate from Produkter", con);
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(dt);
if (dt.Rows.Count > 0)
{
for (int i = 0; i < dt.Rows.Count; i++)
{
total += Convert.ToInt32(dt.Rows[i][0].ToString());
}
average = total / (dt.Rows.Count);
if (average > 1)
{
ratingControl.CurrentRating = average;
lbltxt.Text = dt.Rows.Count + "user(s) have rated this article";
}
else
{
}
}
}
}
Og i min MSSQL Databasen ser min Tabel sådanne ud:
ProduktID - int - Unchecked
ProduktNavn - nvarchar(100) - Unchecked
ProductBeskrivelse - nvarchar(MAX) - Unchecked
ImageURL - nvarchar(MAX) - Unchecked
ProduktPris - money - Unchecked
ProduktVægt - decimal(5, 3) - Unchecked
ProduktDato - date - Unchecked
Rate - int - Checked
Fejlen på siden er noget i min "ratingControl.CurrentRating = average;" linje som ligger næsten til sidst på codebehind siden.
Er der en som kan hjælpe mig, har prøvet alt nu?