Can I use the value of a bound data item within repeater, without binding it?

Can I use the value of a bound data item within repeater, without binding it?

Post by mark4as » Wed, 05 Dec 2007 02:35:11


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));
}
}
 
 
 

Can I use the value of a bound data item within repeater, without binding it?

Post by mark4as » Wed, 05 Dec 2007 03:51:55


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)
{
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 "";
}
}


--