I have a table bound to a repeater. There is a DateTime column called
EntryDate. When the EntryDate changes day [when CompareDates() is true]
I want to write the date out. I want to compare the value of an item
from a table column with a public variable and then set the variable to
the value of that item when the days change [CompareDates() will do
this provided it ]
Can I access the value of EntryDate column? If so how? Clearly not by
using Eval because that requires me to bind it so something which I
don't want to do.
It compiles and gives a runtime error:
Databinding methods such as Eval(), XPath(), and Bind() can only be
used in the context of a databound control.
If it's possible to fix the code below, how so?
<% if (CompareDates(DateStored, Eval("EntryDate")))
{
DateStored = (DateTime)Eval("EntryDate");
%>
</table>
<div class='TabBar'>
<span id='tabDate1' class='TabLeft'><%#
Convert.ToDateTime(DataBinder.Eval(Container.DataItem,
"EntryDate")).ToString("ddd MMM dd yyyy") %></span>
<span class='TabRightBlank'></span>
</div>
<table cellspacing="2" class="DayGroup">
<%} %>
// code behind
public bool CompareDates(DateTime dateStored, object entryDate)
{
DateTime et;
if (entryDate is DBNull)
return false;
else
{
et = (DateTime)entryDate;
return (new DateTime(DateStored.Year, DateStored.Month,
DateStored.Day) > new DateTime(et.Year, et.Month, et.Day));
}
}
mark4asp - 03 Dec 2007 18:51 GMT
> I have a table bound to a repeater. There is a DateTime column called
> EntryDate. When the EntryDate changes day [when CompareDates() is
[quoted text clipped - 41 lines]
> }
> }
Thanks to anyone who looked at this. I already solved the problem.
The solution, using an asp:Repeater is to carry out the logic in code
behind [the PrintDate() method here] and to return a string from that
logic. i.e.:
<ItemTemplate>
<%#PrintDate(DataBinder.Eval(Container.DataItem, "EntryDate"))%>
<!-- blah, blah, blah -->
</ItemTemplate>
// code behind
public string PrintDate(object entryDate)
{
StringBuilder sb;
DateTime et;
if (entryDate is DBNull)
return "";
else
{
et = (DateTime)entryDate;
if (new DateTime(DateStored.Year, DateStored.Month, DateStored.Day)
> new DateTime(et.Year, et.Month, et.Day))
{
DateStored = et;
sb = new StringBuilder(@" </table><br />
<div class='TabBar'>
<span id='tabDate", 256);
sb.Append(TabCount.ToString());
TabCount++;
sb.Append("' class='TabLeft'>");
sb.Append(et.ToString("ddd dd MM yyyy"));
sb.Append(@"</span>
<span class='TabRightBlank'></span>
</div>
<table cellspacing='2' class='DayGroup'>");
return sb.ToString();
}
else
return "";
}
}
--