Suz -
You can use ItemTemplates in a DataGrid, the FAQ examples are all datagrids. Is there a reason you cannot? Here is a complete datagrid form one of my pages:
<asp

ataGrid id="dgGroups" runat="server" AutogenerateColumns="false" OnItemDataBound="dgGroups_ItemDataBound" AllowSorting="True" OnSortCommand="Sort_Grid" align="left" BorderColor="#CC9966" BorderStyle="None" BorderWidth="1px" BackColor="White" CellPadding="3">
<ItemStyle ForeColor="#330099" BackColor="white" Font-Size="12px"></ItemStyle>
<HeaderStyle Font-Size="10" horizontalalign="Center" verticalalign="Middle" ForeColor="#FFFFCC" BackColor="#990000"></HeaderStyle>
<Columns>
<asp:TemplateColumn HeaderText="Select Site">
<ItemTemplate>
<asp:HyperLink
id=HyperLink1
runat="server"
HeaderText="Select Site"
Text='<%# DataBinder.Eval(Container, "DataItem.AWWSiteCode"

%>'
NavigateUrl='<%#strURL & DataBinder.Eval(Container, "DataItem.AWWSiteCode"

& "&GroupName=" & lblGrpName.Text & "&ChartID=" & ddType.SelectedItem.Value%>'
Sortexpression="AwwSiteCode"
/>
</ItemTemplate>
</asp:TemplateColumn>
<asp:BoundColumn DataField="Waterbody_Name" HeaderText="Waterbody Name" ItemStyle-width="100px" Sortexpression="Waterbody_Name"/>
<asp:BoundColumn DataField="Description" HeaderText="Site Description" ItemStyle-width="240px" Sortexpression="Description"/>
<asp:BoundColumn DataField="County" HeaderText="Site County" ItemStyle-width="70px"/>
<asp:BoundColumn DataField="Latitude" HeaderText="Latitude" DataFormatString="{0:f4}" ItemStyle-width="50px"/>
<asp:BoundColumn DataField="Longitude" HeaderText="Longitude" DataFormatString="{0:f4}" ItemStyle-width="50px"/>
<asp:BoundColumn DataField="LastDate" HeaderText="Last Date" DataFormatString="{0:d}" ItemStyle-width="60px" Sortexpression="LastDate"/>
<asp:BoundColumn DataField="ChemCt" HeaderText="#Chm" Sortexpression="ChemCt"/>
<asp:BoundColumn DataField="BacCt" HeaderText="#Bac" Sortexpression="BacCt"/>
<asp:TemplateColumn HeaderText="Active?">
<HeaderStyle horizontalalign="Center" verticalalign="Middle"></HeaderStyle>
<ItemStyle horizontalalign="Center"></ItemStyle>
<ItemTemplate>
<asp:Image id="img_HUC11" RunAt="Server" ImageUrl=<%# WhichImage(Container.DataItem("Active"

) %> />
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="HUC11 <br> 303(d)">
<HeaderStyle horizontalalign="Center"></HeaderStyle>
<ItemStyle horizontalalign="Center"></ItemStyle>
<ItemTemplate>
<asp:CheckBox id="chk_303" RunAt="Server" Checked=<%# Container.DataItem("IPStreams"

%>/>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp

ataGrid>
...this examples also shows calls to code-behind funtion during binding, q.v.,
Protected Function WhichImage(Active As Object) As String
If Active = 1 Then
Return "Images/GreenFlag.gif"
Else
Return "Images/RedFlag.gif"
End If
End Function
...to bind images. Hope this helps.
.