如何在asp.net中使用Ajax应用半星评级控件? [英] How can I apply the half star rating control with ajax in asp.net?

查看:48
本文介绍了如何在asp.net中使用Ajax应用半星评级控件?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

大家好,
我正在使用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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆