2

我在一个由 Ex-Employee 为自定义 gridview 开发的项目中找到了这段代码,该项目带有自定义控件,效果很好,但我不确定它到底在做什么,

代码

public class aBoundField : ImageField
{
    //here I got some get set properties defined
    protected override void OnDataBindField(object sender, EventArgs e)
    {
        Control control = (Control)sender;

        PropertyDescriptor propertyA = TypeDescriptor.GetProperties(DataBinder.GetDataItem(control.NamingContainer)).Find("boundField", true);
        PropertyDescriptor propertyB = TypeDescriptor.GetProperties(DataBinder.GetDataItem(control.NamingContainer)).Find("boundField", true);

        PropertyAFieldValue = this.GetValue(control.NamingContainer, this._PropertyAField, ref propertyA).ToString();
        PropertyBFieldValue = this.GetValue(control.NamingContainer, this._PropertyBField, ref propertyB).ToString();
            base.OnDataBindField(sender, e);
    }

方法中发生了什么, OnDataBindField尤其是在获取 PropertyDescriptor 时。我做了一些研究,发现它是一个属性包,但如果它是一个属性包,它怎么知道这段代码中属性 A 或属性 B 的值是多少。

 PropertyDescriptor propertyA = TypeDescriptor.GetProperties(DataBinder.GetDataItem(control.NamingContainer)).Find("boundField", true);
 PropertyDescriptor propertyB = TypeDescriptor.GetProperties(DataBinder.GetDataItem(control.NamingContainer)).Find("boundField", true);

我不完全明白的是

属性描述符如何 使用相同的代码行获取两个控件的值

TypeDescriptor.GetProperties(DataBinder.GetDataItem(control.NamingContainer)).Find("boundField", true)

上面的代码行将如何确定它是用于属性 A 还是属性 B。

我试图从一个属性描述符中获取值,认为它是一个属性包,但它不能正常工作。

4

2 回答 2

4
GetValue(control.NamingContainer, this._PropertyAField, ref propertyA)

ProperyA 是作为参考给出的,因此在该方法中发生在 propertyA 上的所有事情都将更新上面定义的 propertyA。

使用

PropertyDescriptor propertyA = null;

代替

PropertyDescriptor propertyA = TypeDescriptor.GetProperties(DataBinder.GetDataItem(control.NamingContainer)).Find("boundField", true);

仍然可以工作。

延伸阅读
ref 方法参数关键字

于 2013-03-15T11:12:14.893 回答
0

鉴于您最近的编辑:

属性描述符如何使用相同的代码行获取两个控件的值

它不能。出于某种原因,前员工希望两者都propertyA相同propertyB,或者存在拼写错误,这实际上是某种错误。

于 2013-03-15T10:48:23.927 回答