根据数据源属性显示标题

时间:2018-08-15 08:59:29

标签: c# asp.net .net gridview webforms

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

我显示到属性:

<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();

这是FeatureDesc类:

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类属性动态显示该列标题。

如何动态显示列标题?

1 个答案:

答案 0 :(得分:0)

您可以使用Reflection获取属性的名称,如下所示:Get string name of property using reflection。它使用一种提取属性名称的方法。

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

然后像在您的other question中的回答一样使用它。

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

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

var feature = featureDesc[0];

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