Как мне найти связывание источника по имени? - PullRequest
0 голосов
/ 24 января 2019

У меня есть много bindingsource в моей winform, и я хочу динамически изменять источник данных моего gridview ,, поэтому я хочу получить bindingSource по его имени.Я нашел следующий код, чтобы найти все bindingSource из моей winform,

имя означает, что свойство привязки nameSource name На картинке это имя "bsSL070101"

введите описание изображения здесь

    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");

1 Ответ

0 голосов
/ 24 января 2019

Компонент имеет имя только во время разработки.Если во время выполнения вам нужно найти их по имени, вам нужно полагаться на имя поля.

Следующий фрагмент кода возвращает все поля формы в 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));

Вы можете найти источник привязки по имени в словаре:

var bs = bindingSources["categoriesBindingSource"];

Примечание:

  • Если имя не важно и вам нужны только экземплярыкоторые вы добавили с помощью конструктора:

    var bindingSources = this.components.Components.OfType<BindingSource>();
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...