Hi, schön langsam verzweifle ich, ich nutze die ASP.NET DataList, dies sieht folgendermaßen aus:
<asp:DataList ID="dlBlogEntries" runat="server" >
<ItemTemplate>
<fieldset class="fieldsetCreateWidth">
<%for (int i = 1; i <= 5; i++){ %>
<%# RatingResult = (int)DataBinder.Eval(Container.DataItem, "RatingResult") %>
<input name="<%=uniqueName %>" type="radio" class="star" value="<%=i%>" disabled="disabled"
<% if(i <= RatingResult){ %>
checked="checked" <%} %> />
<%} %>
</fieldset>
</ItemTemplate>
Was ich machen möchte ist, das Ergebnis des Ausdrucks in eine Variable speichern die sich im CodeBehind befindet, ich versuche dass bis jetzt so:
<%# RatingResult = (int)DataBinder.Eval(Container.DataItem, "RatingResult") %>
Allerdings wird das Ergebnis immer in den HTML Code geschrieben anstatt in die Variable gespeichert.
Kann mir jemand sagen wie ich das bewerkstelligen kann, möglicherweise ist ja DataBinder.Eval() einfach der falsche Ansatz.
Danke vielmals
Lg
rizi
Was möchtest Du dann weiter mit dem Wert anstellen? Das DataList sollte auch über einen Event OnItemCreated verfügen, dort kommst Du dann an die Datensätze der Datasource heran, weil dieses Event bei jedem erzeugen aufgerufen wird.
Grüsse
Daniel
Space Profile
Wer nicht fragt, der nicht gewinnt
hi schaedld
es geht um diesen code:
<input name="<%=uniqueName %>" type="radio" class="star" value="<%=i%>" disabled="disabled"
<% if(i <= RatingResult){ %>
checked="checked" <%} %> />
<%} %>
dabei handelt es sich um ein jQuery Rating Plugin (natürlich müssen noch ein paar javascript+bilder eingebunden werden)
Und mit der Variable RatingResult wird angegeben wieviele Sterne beim RatingControl angezeigt werden.
Lg
rizi
willst Du das Rating dann in einer DB speicher? Dann müsstest Du beim selektieren der Werte eine WebMethode aufrufen, die dann den selektierten Sterne-Wert in die DB schreibt.
Grüsse
Daniel
Space Profile
Wer nicht fragt, der nicht gewinnt
Nein, das Ergebnis kommt bereits aus der DB, ich will es nur noch darstellen, allerdings kann ich mit DataBinder.Eval() nichts in eine Variable speichern, die sich im CodeBehind File befindet, diese brauche ich aber damit ich mit
if(i≤ RatingResult)....
festlegen kann wieviele Sterne angezeigt werden.
Auf dieses Verhalten kann ich keinen Einfluss nehmen,da das jQuery Plugin es so vorsieht.
lg
rizi
Also auf die schnelle habe ich den Rating Extender des AjaxControlToolkits genommen und ein kleines Beispiel gemacht.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace WebApplication2
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
IList<Book> books = new List<Book>();
for (int i = 0; i < 10; i++)
{
Random randomRating = new Random();
int rating = randomRating.Next(0, 4);
books.Add(new Book()
{
Name = string.Format(@"Buch {0}", i.ToString()),
Rating = rating
});
}
DataList1.DataSource = books;
DataList1.DataBind();
}
}
public class Book
{
public string Name
{
get;
set;
}
public int Rating
{
get;
set;
}
}
}
Hier noch die ASPX
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication2._Default" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title></title>
<style>
.rating_star
{
font-size: 0pt;
width: 13px;
height: 12px;
margin: 0px;
padding: 0px;
cursor: pointer;
display: block;
background-repeat: no-repeat;
}
.rating_filled
{
background-image: url(Images/star.png);
}
.rating_empty
{
background-image: url(Images/blankstar.png);
}
</style>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScrMgr" runat="server"></asp:ScriptManager>
<div>
<asp:DataList ID="DataList1" runat="server">
<ItemTemplate>
<table>
<tr>
<td>
<asp:TextBox ID="ItemTextBox" runat="server" Text='<% #Eval("Name") %>'></asp:TextBox>
</td>
<td>
<cc1:Rating ID="Rating1" runat="server"
AutoPostBack="false"
StarCssClass="rating_star"
EmptyStarCssClass="rating_empty"
FilledStarCssClass="rating_filled"
WaitingStarCssClass="rating_filled"
CurrentRating='<% #Eval("Rating") %>' ReadOnly="true">
</cc1:Rating>
</td>
</tr>
</table>
</ItemTemplate>
</asp:DataList>
</div>
</form>
</body>
</html>
Grüsse
Daniel
Space Profile
Wer nicht fragt, der nicht gewinnt
@schaedld
Wow, vielen Dank für die Mühe, dann werde ich mir mal dieses Rating Control ansehen.
danke schön
rizi