gpt4 book ai didi

c# - 如何按名称查找 bindingSource?

转载 作者:太空宇宙 更新时间:2023-11-03 12:07:13 25 4
gpt4 key购买 nike

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

name 是指 bindingSource name 属性在图片中,它的名字是“bsSL070101”

enter image description here

    private IEnumerable<Component> EnumerateComponents()
{
return from field in GetType().GetFields(
BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)
where typeof(Component).IsAssignableFrom(field.FieldType)
let component = (Component)field.GetValue(this)
where component != null
where component.ToString().Contains("Windows.Forms.BindingSource")
select component;
}

在我得到我的 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");

最佳答案

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

以下代码段返回 Dictionary<string, BindingSource> 中表单的所有字段:

var bindingSources = this.GetType().GetFields(System.Reflection.BindingFlags.NonPublic |
System.Reflection.BindingFlags.Public |
System.Reflection.BindingFlags.Instance)
.Where(x => typeof(BindingSource).IsAssignableFrom(x.FieldType))
.ToDictionary(x => x.Name, x => (BindingSource)x.GetValue(this));

您可以在字典中按名称查找您的绑定(bind)源:

var bs = bindingSources["categoriesBindingSource"];

注意:

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

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

关于c# - 如何按名称查找 bindingSource?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54339456/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com