I use grid view in my project to display data.
I display to properties:
<asp:GridView ItemType="WebUI.FeatureInfoArea.FeatureDesc" AutoGenerateColumns="false" ID="gvFeatList" runat="server">
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <%# Item.Title %>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField>
            <ItemTemplate>
                <%# Item.Tip %>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>
And here how I bind to data source:
FeaturesDesc result = getData();
gvFeatList.DataSource = result.featureDesc;
gvFeatList.DataBind();
And here is FeaturesDesc class:
public class FeaturesDesc
{
    public List<FeatureDesc> featureDesc { get; set; }
}
public class FeatureDesc
{
    public string Title { get; set; }
    public string Tip { get; set; }
    public string UID { get; set; }
} 
When columns is created on browser the data is displayed in rows, but headers of the columns are empty.
I know that I can use TextHeader attribute in TemplateField but I want that column header to be displayd dynamically according to FeatureDesc class property.
How can I make display column's header dynamically?