简体   繁体   中英

AjAX Rating Control storing and fetching from database using repeater in asp.net c# i

I got error:

Specified cast is not valid.

I need to repeat every user already rating star from database how to get rating from db. Here how to take rating from database.

Here is the stored procedure:

ALTER PROCEDURE [dbo].[sp_comments]
(
@eid int
)
AS
BEGIN
    declare @sql varchar(max)
    SET NOCOUNT ON;

    select @sql='select g.username,dbo.fn_username(g.updation) as updation,
    c.comment_id,c.id,c.comments,c.commented_by,c.mail,c.date,c.rating_star
    from comments c
    inner join tbl_data as g on g.id=c.id
    WHERE c.id=''' +CONVERT(VARCHAR(50),@eid) +''' order by comment_id desc'
    exec(@sql)
    print(@sql)

END

Here is my asp.net Design page:

<asp:Rating ID="user_rating" runat="server" CurrentRating='<%#Eval("rating_star")%>' RatingDirection="LeftToRightTopToBottom" StarCssClass="ratingStar" WaitingStarCssClass="SavedRatingStar" FilledStarCssClass="FilledRatingStar" 
EmptyStarCssClass="EmptyRatingStar" AutoPostBack="true"></asp:Rating>

Here is the code behind - C# of the page

 protected void Button1_Click(object sender, EventArgs e)

    {
        if (Request.QueryString["id"] != null) 
        { 
        int id;
        id = Convert.ToInt32(Request.QueryString["id"].ToString());

        con = new SqlConnection(str);
        con.Open();
        cmd = new SqlCommand("sp_usercomment", con);
        cmd.CommandType = CommandType.StoredProcedure;   
        cmd.Parameters.AddWithValue("@mail", mail_by.Text);
        cmd.Parameters.AddWithValue("@comments", comments.Text);
        cmd.Parameters.AddWithValue("@name", name_by.Text);
        cmd.Parameters.AddWithValue("@updated_name", Convert.ToInt32(Request.Cookies["userid"].Value));
        cmd.Parameters.AddWithValue("@eid",id);
        cmd.Parameters.AddWithValue("@rating",SqlDbType.Int).Value=rating.CurrentRating;
        cmd.ExecuteNonQuery();
        con.Close();
        Label2.Visible = true;
        Label2.Text = "Thanks for your valuable feedback";

        mail_by.Text = "";
        comments.Text = "";
        name_by.Text= "";


        getcomments();
        }
    }


 void getcomments()

    {
        con = new SqlConnection(str);
        con.Open();
        cmd = new SqlCommand("sp_comments", con);
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.Add(new SqlParameter("@eid", Request.QueryString["id"].ToString()));
        da=new SqlDataAdapter(cmd);
        dt = new DataTable();
        da.Fill(dt);
        con.Close();

        comment_label.Text = "View " + dt.Rows.Count.ToString() + " Comments";
        if (dt.Rows.Count > 0)
        {
            DataRow dr=dt.Rows[0];
            repeat.DataSource = dt.DefaultView;
            repeat.DataBind();
            review_panel.Visible = true;
            product = dr["username"].ToString();


        }
        else
        {
            review_panel.Visible = false;
        }
    }

try this,

        con = new SqlConnection(str);
        con.Open();
        cmd = new SqlCommand("sp_comments", con);
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.Add(new SqlParameter("@eid",Request.QueryString["id"].ToString()));
        da=new SqlDataAdapter(cmd);
        dt = new DataTable();
        da.Fill(dt);
        con.Close();

        DataTable dtCloned = dt.Clone();
        dtCloned.Columns[3].DataType = typeof(Int32);
        foreach (DataRow row in dt.Rows)
        {
            dtCloned.ImportRow(row);
        }
        repeat.DataSource = dtCloned;
        repeat.DataBind();

note : here "3" in dtCloned.Columns[3].DataType will be your column number where rating_star columns is coming in your datatable.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM