C# 如何按名称查找bindingSource?

C# 如何按名称查找bindingSource?,c#,winforms,reflection,C#,Winforms,Reflection,我的winform中有很多bindingsource,我想动态更改gridview的数据源,所以我想通过名称获取bindingsource。 我从winform中找到了以下代码来查找所有bindingSource 名称表示的是bindingSource名称属性 图中,它的名字是“bsSL070101” private IEnumerable枚举组件() { 从GetType()中的字段返回。GetFields( BindingFlags.Instance | BindingFlags.Publ

我的winform中有很多bindingsource,我想动态更改gridview的数据源,所以我想通过名称获取bindingsource。 我从winform中找到了以下代码来查找所有bindingSource

名称表示的是bindingSource名称属性 图中,它的名字是“bsSL070101”

private IEnumerable枚举组件()
{
从GetType()中的字段返回。GetFields(
BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)
其中typeof(Component).IsAssignableFrom(field.FieldType)
let component=(component)field.GetValue(this)
其中组件!=null
其中component.ToString()包含(“Windows.Forms.BindingSource”)
选择组件;
}
在我得到BindingSourceList后,我想按名称筛选其中一个,但我不知道怎么做,请帮助我,谢谢~

    IEnumerable<Component> BindingSourceList = EnumerateComponents();
    //I wonder find a bindingSource by name, but it doesn't work
    BindingSource bb = BindingSourceList.find(a=>a.name=="bsSL070101");
IEnumerable BindingSourceList=EnumerateComponents();
//我想通过名称找到bindingSource,但它不起作用
BindingSource bb=BindingSourceList.find(a=>a.name==“bsSL070101”);

组件仅在设计时具有名称。如果在运行时需要使用它们的名称查找它们,则需要依赖于字段名

下面的代码返回
字典中表单的所有字段

您可以在字典中按名称找到绑定源:

var bs = bindingSources["categoriesBindingSource"];
注:

  • 如果名称不重要,您只需要使用designer添加的实例:

    var bindingSources = this.components.Components.OfType<BindingSource>();
    
    var bindingSources=this.components.components.OfType();
    

组件在设计时才有名称。如果在运行时您需要使用它们的名称来查找它们,那么您需要依赖字段名。这是c#的许多愚蠢之处之一。我仍然不明白为什么组件在运行时没有name属性。我能想到的唯一原因是让调试器的生活变得更加艰苦,这真是太棒了!它完全可以工作!!这正是我想要的,非常感谢!!没有你的帮助,我不可能做到这一点。
var bs = bindingSources["categoriesBindingSource"];
var bindingSources = this.components.Components.OfType<BindingSource>();