首页 > 解决方案 > 根据数据源属性显示标题

问题描述

我在我的项目中使用网格视图来显示数据。

我显示到属性:

<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>

在这里我如何绑定到数据源:

FeaturesDesc result = getData();

gvFeatList.DataSource = result.featureDesc;
gvFeatList.DataBind();

这里是 FeaturesDesc 类:

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

在浏览器上创建列时,数据按行显示,但列的标题为空。

我知道我可以使用TextHeader属性,TemplateField但我希望根据FeatureDesc类属性动态显示列标题。

如何动态制作显示列的标题?

标签: c#asp.net.netgridviewwebforms

解决方案


您可以使用反射来获取属性的名称,如下所示:使用反射获取属性的字符串名称。它使用一种方法来提取属性的名称。

string GetPropertyName<T>(Expression<Func<T>> propertyExpression)
{
    return (propertyExpression.Body as MemberExpression).Member.Name;
}

然后像我在其他问题中的回答一样使用它。

GridView1.HeaderRow.Cells[0].Text = GetPropertyName(() => featureDesc[0].Title);

您还可以从 List 中获取单个对象并使用nameof

var feature = featureDesc[0];

GridView1.HeaderRow.Cells[1].Text = nameof(feature.Tip);

推荐阅读