如何在asp.net中使用Ajax应用半星评级控件? [英] How can I apply the half star rating control with ajax in asp.net?
问题描述
大家好,
我正在使用AJAX评分控件.我希望获得半星评分.
例如,
如果我的AVG评分"为3,则我的星星"想要显示3
如果我的AVG评分计数是2.6,则我的星星希望显示2 1/2分,即2分和2分.半颗星.但是,它既没有显示,也显示了3星.
我的数据库和我的代码是这样的 ,
Hi All,
I am using AJAX Rating Control.I want half star rating.
For Example,
If My AVG Rating Count is 3 Then My Stars Wants to be show 3
If My AVG Rating Count is 2.6 Then My Stars Wants to be Show 2 1/2 mark i.e., two & half stars.But,it was not showing then also it is showing 3 stars.
My Database & My Code goes like this,
Create Table Averagerating
(
ID int IDENTITY(1,1) Primary Key,
Rating Float,
UserName Varchar(50)
)
<style type="text/css">
.ratingStar
{
font-size: 0pt;
width: 13px;
height: 12px;
margin: 0px;
padding: 0px;
cursor: pointer;
display: block;
background-repeat: no-repeat;
}
.filledRatingStar
{
background-image: url(FilledStar.PNG);
}
.emptyRatingStar
{
background-image: url(EmptyStar.PNG);
}
.savedRatingStar
{
background-image: url(SavedStar.PNG);
}
</style>
<form id="form1" runat="server">
<AJAX:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server">
</AJAX:ToolkitScriptManager>
<div>
<asp:UpdatePanel ID="pnlRating" runat="server">
<ContentTemplate>
<table>
<tr>
<td>
<asp:Label ID="lblMyRating" runat="server" Text="Average Rating" Font-Bold="true"></asp:Label>
</td>
<td>
<ajax:Rating ID="ArticleRating"
runat="server"
CurrentRating="2"
MaxRating="5"
StarCssClass="ratingStar"
WaitingStarCssClass="savedRatingStar"
FilledStarCssClass="filledRatingStar"
EmptyStarCssClass="emptyRatingStar"
onchanged="ArticleRating_Changed"/>
</td>
<td>
<asp:Label ID="lblDisplay" runat="server" Font-Bold="true"></asp:Label>
</td>
</tr>
</table>
</ContentTemplate>
</asp:UpdatePanel>
</div>
</form>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Data;
public partial class _Default : System.Web.UI.Page
{
SqlConnection con = new SqlConnection("MyConnection");
float COUNT = 0;
float RATING = 0;
float Result = 0;
float MyCurrentRating = 0;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindAverageRatingControl();
}
}
public void BindAverageRatingControl()
{
DataTable dt = new DataTable();
con.Open();
SqlCommand cmd = new SqlCommand("SELECT COUNT(ID) AS NumberOfUsers,SUM(Rating) AS Total FROM Averagerating", con);
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(dt);
if (Convert.ToInt32(dt.Rows[0]["NumberOfUsers"].ToString()) != 0)
{
COUNT = float.Parse(dt.Rows[0]["NumberOfUsers"].ToString());
RATING = float.Parse(dt.Rows[0]["Total"].ToString());
Result = Convert.ToInt32(Math.Ceiling((RATING / COUNT) * 18));
MyCurrentRating = (float)Math.Round((RATING / COUNT), 1);
ArticleRating.CurrentRating = Convert.ToInt32(MyCurrentRating);
}
else
{
ArticleRating.CurrentRating = 0;
}
lblDisplay.Text = MyCurrentRating.ToString();
ArticleRating.Style.Add("width", MyCurrentRating + "px");
}
protected void ArticleRating_Changed(object sender, AjaxControlToolkit.RatingEventArgs e)
{
con.Open();
SqlCommand cmd = new SqlCommand("Insert Into Averagerating(Rating,UserName)values(@Rating,@UserName)", con);
cmd.Parameters.AddWithValue("@Rating", ArticleRating.CurrentRating);
cmd.Parameters.AddWithValue("@UserName", "DESAI");
cmd.ExecuteNonQuery();
con.Close();
BindAverageRatingControl();
}
}
请为此提供解决方案...
预先感谢,
VenkiDesai.
Please Give solution for this...
Thanks in advance,
VenkiDesai.
推荐答案
您需要使用其他图像,例如5 *,4.5 *,4 *,...等
然后,您可以使用图像标签,并将其设置为图像源(URL)运行时间,示例如下:
标记:
You need to have different images, 5*, 4.5 * , 4*, ... etc
Then you can use a Image Label, and set it image source(url) run time, a sample could be:
Markup:
<asp:Image runat="server" ID="imgRating" AlternateText="Average rating" />
背后的代码:
code behind:
string url = "~/images/stars{0}.gif";
if (_value <= 1.3)
url = string.Format(url, "10");
else if (_value <= 1.8)
url = string.Format(url, "15");
else if (_value <= 2.3)
url = string.Format(url, "20");
else if (_value <= 2.8)
url = string.Format(url, "25");
else if (_value <= 3.3)
url = string.Format(url, "30");
else if (_value <= 3.8)
url = string.Format(url, "35");
else if (_value <= 4.3)
url = string.Format(url, "40");
else if (_value <= 4.8)
url = string.Format(url, "45");
else
url = string.Format(url, "50");
imgRating.ImageUrl = url;
看到2.5图片,我们可以将其另存为star25.png:
http://mmmjustlovely.files.wordpress.com/2012/07/2-5- stars.png [^ ]
Se 4.5图片,另存为star45.png
http://www.easywaystosavemoney.com.au/images/689.jpg [ ^ ]
see 2.5 image, we can save it as star25.png:
http://mmmjustlovely.files.wordpress.com/2012/07/2-5-stars.png[^]
Se 4.5 image, save it as star45.png
http://www.easywaystosavemoney.com.au/images/689.jpg[^]
尝试更改这行:
Try changing this line:
MyCurrentRating = (float)Math.Round((RATING / COUNT), 1);
到
to
MyCurrentRating = (float)Math.Round((RATING / COUNT), 1, MidpointRounding.AwayFromZero);
如果仍然不能解决问题,请在此处查看不同的重载,并找到适合您的方法: ^ ]
顺便说一句,奇怪的是您想降低您的评级,然后降低实际评级!
If this does not resolve, look here at the different overloads and see what works for you: MSDN: Math.Round Method [^]
BTW, strange you want to lower your rating then actual!
这篇关于如何在asp.net中使用Ajax应用半星评级控件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!