Нашел баг в ASP.NET:

Выражение

<asp:BoundField DataField="A" HeaderText="A" ReadOnly="True" Sortexprеssion="A" DataFormatString="{0:n}" >

отображается образом, отличным от выражения

<asp:TemplateField HeaderText="A" Sortexprеssion="A">

...

<ItemStyle HorizontalAlign="Right" />

<ItemTemplate>

<asp:Label ID="Label1" runat="server" Text='<%# Bind("A", "{0:n}") %>'></asp:Label>

</ItemTemplate>

</asp:TemplateField>

Первое в визуальном редакторе можно сконвертировать во второе. Формат {0:n} должен давать десятичную дробь с разделителями тысяч и двумя знаками после десятичного разделителя. В случае первого выражения формат почему-то не играет роли, хотя должен.

Может, я ламер, и это не баг, а фича?