OT: fan va kul att se dig här igen Rossi :D
Nu till frågan. Visa lite av din reapeter-kod:
Mv icaaq
9 svar · 594 visningar · startad av Rossifumi
Jag har ett datum i en databas som jag vill jämföra med dagens datum. Har hittat den här sidan där dom går igenom lite hur man kan göra.
Men nu till min fråga. Hur kommer jag i min repeater åt datumet ur databasen?
När jag bara vill skriva ut det så skriver jag ju <%# DataBinder.Eval(Container.DataItem, "threadDateTime") %>, försöker jag skriva t.ex System.DateTime date2 = DataBinder.Eval(Container.DataItem, "threadDateTime"); så knasar det ut rejält.
Hjälp :l
OT: fan va kul att se dig här igen Rossi :D
Nu till frågan. Visa lite av din reapeter-kod:
Mv icaaq
Du kan skapa en funktion och anropa den med datumet som argument, och då göra vad du vill med den.
<%# functionToEvalDate(container.dataitem("threadDateTime"))%>
Kul att vara här igen ;)
Vill du ha koden ur code-behind eller ur dokumentet?
Antingen gör du som cyprys visar. men jag brukar kör en onitemdatabound på repetern för att i cb-filen sköta alla bindningar.
vill du se hur jag brukar göra kan du posta båda koderna.
mv icaaq
cyprys skrev:
Du kan skapa en funktion och anropa den med datumet som argument, och då göra vad du vill med den.
<%# functionToEvalDate(container.dataitem("threadDateTime"))%>
Skriver:
<%
System.DateTime date1 = System.DateTime.Now;
[b]System.DateTime date2 = functionToEvalDate(Container.DataItem("threadDateTime"));[/b]
%>
Får då följande felmeddelande på den feta raden:
Compiler Error Message: CS0246: The type or namespace name 'Container' could not be found (are you missing a using directive or an assembly reference?)
icaaq skrev:
Antingen gör du som cyprys visar. men jag brukar kör en onitemdatabound på repetern för att i cb-filen sköta alla bindningar.
vill du se hur jag brukar göra kan du posta båda koderna.
mv icaaq
Snodde kod rätt av ifrån en annan tråd :OO
private void Page_Load(object sender, System.EventArgs e)
{
if(!IsPostBack)
{
BindData();
}
}
public void BindData()
{
myRep.DataSource = GetData();
myRep.DataBind();
}
public DataTable GetData()
{
DataSet ds = new DataSet();
string connS = "Provider=Microsoft.Jet.OleDB.4.0;" + "Data Source = " + Server.MapPath("/data/db/forum.mdb");
string mySQL = "SELECT users.userName, users.userSig,users.userID, threads.threadID, threads.threadDateTime, threads.threadName, threads.threadText FROM threads INNER JOIN users ON threads.threadAuthor = users.userID ORDER BY threads.threadDateTime";
OleDbConnection conn = new OleDbConnection(connS);
OleDbDataAdapter adapter = new OleDbDataAdapter();
adapter.SelectCommand = new OleDbCommand(mySQL, conn);
adapter.Fill(ds);
return ds.Tables[0];
}
DataBinder.Eval(Container.DataItem, "threadDateTime") är ett "object" och kan inte jämfölras med ett datum om du inte först typkonverterar det till ett datum annars går det att göra jämförelsen på det sättet (poseudokod):
<%# (DateTime.Now.ToShortDateString() == ([b](DateTime)[/b]DataBinder.Eval(Container.DataItem, "threadDateTime")).ToShortDateString()) %>
//Exempel på användning:
<asp:label visible="<%# (a==b) %>" runat="server">
Men det är bättre att göra detta från koden, exempelvis lägg en label i din repeater och gör nåt sånt här (sen får du naturligtvis modifiera koden och använda rätt kontroll beroende på vad du ska använda jämförelsen till):
private void R_ItemDataBound(object sender, System.Web.UI.WebControls.RepeaterItemEventArgs e) {
if(e.Item.ItemType == ListItemType.Item)
((Label)e.Item.FindControl("myL")).Text = (DateTime.Now == value);
}
i .aspx
[red]
<asp:repeater runat='server' id='myRep' onitemdatabound='dateRep_Bound'>
<itemtemplate>
<asp:label runat='server' id='lblDate'/>
</itemtemplate>
</asp:repeater>
[/red]
i .cs
[red]
public void dateRep_Bound(object sender, RepeaterItemEventArgs e)
{
switch(e.Item.ItemType)
{
case ListItemType.Item:
case ListItemType.AlternatingItem:
//Hitta controllen för lbldate
Control _ctrlDate = e.Item.FindControl("lblDate");
if(_ctrlDate != null)
{
Label _date = (Label)_ctrlDate;
_date.Text = e.Item.DataItem("threadDateTime");
}
break;
}
}
[/red]
Kanske det skulle kunna se ut?
mv icaaq
Tackar för alla svar... Skall klura lite nu och återkommer när jag testat.