Hier mal ein Quick ’n‘ Dirty-Ansatz einer Telefonliste mit Initialen.

.aspx
<asp:Repeater ID="Repeater1" runat="server">
<HeaderTemplate>
<table>
</HeaderTemplate>
<ItemTemplate>
<%#SetInitial(Eval("Nachname").ToString())%>
<tr>
<td><a href="profil.aspx?ID=<%#Eval("ID")%>">
<%#Eval("Nachname")%>, <%#Eval("Vorname")%></a></td>
<td><%#Eval("Telefon")%></td>
<td><%#Eval("EMail")%></td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
.aspx.cs
// C#
private char initialOld;
public string SetInitial(string lastName)
{
char initial = Convert.ToChar(lastName.Substring(0, 1).ToUpper());
if (initial == 'Ä') initial = 'A'; // Umlaute werden unter den
if (initial == 'Ü') initial = 'U'; // dazugehörigen Vokaln gelisten
if (initial == 'Ö') initial = 'O';
if (initialOld != initial)
{
initialOld = initial;
return string.Format(@"
<tr>
<td colspan=""3"">
<span class=""initial""><br/> <br/>{0}</span>
<a name=""i{1}""></a><span><a href=""#top"">zum Index</a></span>
<hr />
</td>
</tr>", initial, initial);
}
else
{
return null;
}
}