c# - 根据数据源属性显示标题
问题描述
我在我的项目中使用网格视图来显示数据。
我显示到属性:
<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
类属性动态显示列标题。
如何动态制作显示列的标题?
解决方案
您可以使用反射来获取属性的名称,如下所示:使用反射获取属性的字符串名称。它使用一种方法来提取属性的名称。
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);
推荐阅读
- c# - 为什么我不能将对象转换为它的接口类型?
- twitter-bootstrap - Quasar 中的类似 Bootstrap 的容器?
- r - 将一个数据框子化为多个数据框
- regex - 排除重复模式的最简单的正则表达式是什么?
- cmake - 给出单个后缀/前缀如何从列表中添加前缀/后缀?
- python - 根据列值保留数据框行的百分比
- bash - 以秒为单位的 bash 时间到人类可读的字符串
- windows - 从 Sublime Text 3 中删除某些语言
- c# - How to cast string to class property
- django - django 管理站点更改字段的显示标签