【问题标题】:Display headers according to the data source property根据数据源属性显示标题
【发布时间】:2019-01-22 03:47:10
【问题描述】:

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

我显示到属性:

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

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

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

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

【问题讨论】:

  • AutoGenerateColumns 指示是否为数据源中的每个字段自动创建绑定字段。 AutoGenerateColumns="false" 表示创建自定义列,您必须手动完成。

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


【解决方案1】:

您可以使用反射来获取属性的名称,如下所示: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);

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

var feature = featureDesc[0];

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-28
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    • 2010-09-26
    • 1970-01-01
    • 2020-08-19
    相关资源
    最近更新 更多