我在项目中使用网格视图来显示数据。
我显示到属性:
<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
类属性动态显示该列标题。
如何动态显示列标题?
答案 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);