从课堂中排除某些字段

时间:2015-01-30 09:57:54

标签: c# asp.net

我有20个decimal字段和20个string字段中的另一个的数据类。我从SQL调用中填充这两个类,然后使用这些值来填充网页上的标签。

public class MyDecimals
{
    public decimal MyDecimal1 { get; set; }
    public decimal MyDecimal2 { get; set; }
    public decimal MyDecimal3 { get; set; }
    public decimal MyDecimal4 { get; set; }
    public decimal MyDecimal5 { get; set; }
    public decimal MyDecimal6 { get; set; }
    .
    .
    public decimal MyDecimal20 { get; set; }
}

public class MyDecimalsNames
{
    public string MyDecimal1Name { get; set; }
    public string MyDecimal2Name { get; set; }
    public string MyDecimal3Name { get; set; }
    public string MyDecimal4Name { get; set; }
    public string MyDecimal5Name { get; set; }
    public string MyDecimal6Name { get; set; }
    .
    .
    public string MyDecimal20Name { get; set; }
}

aspx页面上,标签的名称类似于lblMyDecimal1lblMyDecimal1NamelblMyDecimal2lblMyDecimal2Name .....

而不是像这样逐行编码标签值......

lblMyDecimal1.Text = myClass.MyDecimal1.ToString("#,##0");
lblMyDecimal1Name.Text = myNamesClass.MyDecimal1Name;
lblMyDecimal2.Text = myClass.MyDecimal2.ToString("#,##0");
lblMyDecimal2Name.Text = myNamesClass.MyDecimal2Name;

我试图遍历类中的字段并根据字段名称分配标签值:

foreach (PropertyDescriptor prop in TypeDescriptor.GetProperties(myClass))
{
    ((Label)FindControl("lbl" + prop.Name)).Text = prop.GetValue(myClass).ToString("#,##0");
}
foreach (PropertyDescriptor prop in TypeDescriptor.GetProperties(myNameClass))
{
    ((Label)FindControl("lbl" + prop.Name)).Text = prop.GetValue(myNameClass) + "";
}

这可以按照我想要的方式工作,但是目前我只有标签1 - 12,13 - 20在这个特定页面上没有使用。

所以我的问题是:跳过页面上没有的字段/标签的最佳方法是什么?

我知道我可以创建一个排除列表并测试不在列表中的每个值,但我想在此之前将它们排除在外,如果可能的话,它们首先不在类中。

1 个答案:

答案 0 :(得分:3)

只需检查标签是否存在:

if (FindControl("lbl" + prop.Name) != null) { ... }

use databinding