当前位置:  开发笔记 > 编程语言 > 正文

.net数据绑定 - 引用匿名类型属性

如何解决《.net数据绑定-引用匿名类型属性》经验,为你挑选了2个好方法。

我已将ASP.net GridView绑定到匿名类型的集合.

如何在RowDataBound事件处理程序中引用匿名类型的一个属性?

我已经知道像这样强制转换匿名类型的方法:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        var AnonObj = Cast(e.Row.DataItem, 
          new { StringProperty = "", BoolProperty = false, IntProperty = 0 });

        if (AnonObj.BoolProperty)
        {
            e.Row.Style.Add(HtmlTextWriterStyle.Color, "Red");
        }
    }
}


T Cast(object obj, T type)
{
    return (T)obj;
}

我想大多数人会说这很麻烦,尽管它确实有效.在我的真实代码中,我有超过3个属性,我必须在我添加或重新排序我的匿名类型的属性的任何时候更新两个地方的代码.

有没有更好的方法告诉e.Row.DataItem它具有特定类型的特定属性并强制该对象给我该值(除了创建一个类)?



1> leppie..:

考虑使用反射.

例:

object o = e.Row.DataItem;
Type t = o.GetType();
PropertyInfo pi = t.GetProperty("StringProperty");
if (pi != null && pi.PropertyType == typeof(string))
{
  // the property exists!
  string s = pi.GetValue(o, null) as string;
  // we have the value
  // insert your code here
  // PROFIT!  :)
}

错误检查和优化留给读者练习.



2> Andrew Hare..:

更好的方法是创建一个类型来处理这个,这样你就不必进行所有的转换来使用匿名类型.

推荐阅读
依然-狠幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有