Click here to Skip to main content
15,906,645 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
I want to add Ajax Rating control on a grid; I can do it for a single topic but unable to add this control on grid.

Here is my code:(.aspx)

XML
<asp:UpdatePanel ID="UpdatePanel3" runat="server">
                    <ContentTemplate>
<asp:GridView ID="grd1" runat="server" AutoGenerateColumns="False"
        DataSourceID="ProgScheduleDataSource" DataKeyNames="ProgrammeID"
        CssClass="mGrid" PagerStyle-CssClass="pgr" AlternatingRowStyle-CssClass="alt"
        AllowPaging="True" Height="479px" Width="571px" PageSize="5" BorderColor="#2A2A2A"
            BorderStyle="Solid" BorderWidth="1px" CellPadding="0" ToolTip="Programme"
                            onselectedindexchanged="grd1_SelectedIndexChanged"
                            onselectedindexchanging="grd1_SelectedIndexChanging">
<Columns>
<asp:BoundField DataField="ProgrammeID" HeaderText="Programme ID" ReadOnly="true" SortExpression="ProgrammeID" />
<asp:BoundField DataField="ProgrammeName" HeaderText="Programme Name" ItemStyle-CssClass="prg"/>
<asp:TemplateField HeaderText="Average Rating">
<ItemTemplate>
<ajax:Rating ID="ajaxrating" AutoPostBack="true" OnChanged="RatingControlChanged" runat="server" StarCssClass="ratingEmpty" WaitingStarCssClass="ratingSaved" EmptyStarCssClass="ratingEmpty" FilledStarCssClass="ratingFilled">
</ajax:Rating>
<asp:label ID="lblrating" Text="_no of user(s) voted" runat="server"/>
</ItemTemplate>
</asp:TemplateField>
</Columns>

<PagerStyle CssClass="pgr"></PagerStyle>

<AlternatingRowStyle CssClass="alt"></AlternatingRowStyle>
</asp:GridView>
    <asp:SqlDataSource ID="ProgScheduleDataSource" runat="server"
        ConnectionString="<%$ ConnectionStrings:dbConnection %>"
        SelectCommand="SELECT * FROM [ProgrammeSchedule]"></asp:SqlDataSource>
</ContentTemplate>
 <Triggers>
 <asp:AsyncPostBackTrigger ControlID="grd1" />
 </Triggers>
 </asp:UpdatePanel>


this is gridview code.
And cs code is as follows:

con.Open();
        SqlCommand cmd = new SqlCommand("insert into RatingDetails(ProgrammeID, Rating, machine_ip)values(@id,@Rating,@ip)", con);
        cmd.Parameters.AddWithValue("@id", ip.Text);
        cmd.Parameters.AddWithValue("@Rating", ratingControl.CurrentRating);
        cmd.Parameters.AddWithValue("@ip", ip.Text);
        cmd.ExecuteNonQuery();
        con.Close();
        BindRatingControl();
        con.Close();
    }
    protected void BindRatingControl()
    {
        int total = 0;

        DataTable dt = new DataTable();
        con.Open();
        SqlCommand cmd = new SqlCommand("Select Rating from RatingDetails", 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());
            }
            int average = total/(dt.Rows.Count);
            ratingControl.CurrentRating = average;
            lbltxt.Text = dt.Rows.Count+"user(s) have rated this programme";
        }
    }


please help me to add multiple rating in Grid. Thanks in advance.
Posted

You can try this article[^].
 
Share this answer
 
Comments
sahabiswarup 16-Jan-12 5:25am    
i've tried that.
 
Share this answer
 
Comments
sahabiswarup 17-Jan-12 1:16am    
i have also tried this one. But its not that which i want to know.
aspx
XML
<asp:TemplateField HeaderText="Click to Rate">
<ItemTemplate>
<ajax:Rating ID="ajaxrating" AutoPostBack="true" OnChanged="RatingControlChanged" runat="server" StarCssClass="ratingEmpty" WaitingStarCssClass="ratingSaved" EmptyStarCssClass="ratingEmpty" FilledStarCssClass="ratingFilled">
</ajax:Rating>
<asp:label ID="lblrating" runat="server"/>
</ItemTemplate>
</asp:TemplateField>

C#
<script>
        function GridViewRowChecked(what) {
            var Ctl = new RegExp("ctl\\d+") // this regular expression will get the line nubmer with the ctl prefix
            //which is put automatically by ASP.NET for GridViews and DataGrids ;
            var LineNumber = Ctl.exec(what.name).toString();
            //get the control names to operate on:
            var txtProduct = document.getElementById("grd1_" + LineNumber + "_lblProgName");

            //set Product textbox to readonly or not accroding to the checkbox check:
            if (what.checked) {
                //in order to accomodate for IE and other browsers I set the readonly attribute in two ways:
                txtProduct.setAttribute("readonly", "none");
                txtProduct.readOnly = false;
                //it's not worth it to use Ifs to determine which browser it is cuz it will only slow id down

            }
            else {
                txtProduct.setAttribute("readonly", "readonly");
                txtProduct.readOnly = true;
            }
        }
    </script>


cs
protected void RatingControlChanged(object sender, AjaxControlToolkit.RatingEventArgs e)
    {
        AjaxControlToolkit.Rating myRating = (AjaxControlToolkit.Rating)sender;
        System.Text.RegularExpressions.Regex rexLineNo = new System.Text.RegularExpressions.Regex("ctl\\d+");
        string progid = this.ProgrameID(rexLineNo.Match(myRating.UniqueID).ToString());

        con.Open();
        SqlCommand cmd = new SqlCommand("insert into RatingDetails(ProgrammeID, Rating, machine_ip)values(@id,@Rating,@ip)", con);
        cmd.Parameters.AddWithValue("@id", progid);
        string temp = myRating.CurrentRating.ToString();
        cmd.Parameters.AddWithValue("@Rating", Convert.ToInt32(temp));
        cmd.Parameters.AddWithValue("@ip", ip.Text);
        cmd.ExecuteNonQuery();
        con.Close();
        BindRatingControl();
        UpdateRating();
        con.Close();
        cls.MsgBox("Thank you for rate this programme", this.Page);
    }
    public string ProgrameID(string LineNo)
    {
        foreach (GridViewRow r in this.grd1.Rows)
        {
            Label lblProgID = (Label)r.FindControl("lblProgID");
            if (lblProgID.UniqueID.Contains(LineNo))
            {
                return lblProgID.Text;
            }
        }
        return string.Empty;
    }
    protected void BindRatingControl()
    {
        int total = 0;
        DataTable dt1 = new DataTable();
        con.Open();
        SqlCommand cmd1 = new SqlCommand("Select * from ProgrammeSchedule", con);
        SqlDataAdapter da1 = new SqlDataAdapter(cmd1);
        da1.Fill(dt1);
        for (int p = 1; p <= dt1.Rows.Count; p++)
        {
            DataTable dt = new DataTable();
            //con.Open();
            SqlCommand cmd = new SqlCommand("Select Rating from RatingDetails where ProgrammeID=" + p, 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());
                }
                int average = total / (dt.Rows.Count);
                //AjaxControlToolkit.Rating myRating = e.Row.FindControl("ajaxrating") as AjaxControlToolkit.Rating;
                //ajaxrating.CurrentRating = average;
                //lblrating.Text = dt.Rows.Count + "user(s) have rated this programme";
            }
        }
        con.Close();
    }
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900