как автоматически привязать поле со списком при вводе клиента в форму CustomerEntry

#c# #winforms #binding

#c# #winforms #привязка

Вопрос:

В моем проекте у меня есть две формы BillEntry и CustomerEntry.

В CustomerEntry добавляются новые клиенты.

Поле со списком формы BillEntry

Здесь при нажатии кнопки new я открываю новую форму CustomerEntry, здесь форма BillEntry уже открыта в задней части формы CustomerEntry. Я не хочу, чтобы моя форма BillEntry закрывалась..

Здесь поле со списком клиентов не будет принимать нового клиента, введенного в customerentry..

Я привязываю поле со списком клиента в конструкторе формы BillEntry с помощью LINQ…

И привязка поля со списком при событии ввода поля со списком также не работает..

Пожалуйста, покажите мне способ, как я могу это сделать…

запрос linq или код не проблема. проблема в том, где я могу вызвать метод привязки, который привязывает поле со списком?

 public BillEntry()
{
      InitializeComponent();
      Customer_Binding();           
}

private void Customer_Binding()
{
      DataClasses1DataContext db = new DataClasses1DataContext();
      cbx_customer.DisplayMember = "CustomerName";
      cbx_customer.ValueMember = "CustomerID";
      cbx_customer.DataSource = db.Customers;
}
  

Комментарии:

1. Не могли бы вы, пожалуйста, показать нам, что возвращает ваш запрос LINQ, и как вы привязываете его к полю со списком в данный момент?

Ответ №1:

Тогда использование BindingSources могло бы быть лучше.

Добавьте BindingSource в свою форму, затем в свойствах поля со списком задайте свойству DataSource значение BindingSource, которое вы только что добавили.

 comboBox1.DataSource = bindingSource1;
  

Затем вы устанавливаете источник данных BindingSource в свой список клиентов:

например, что-то вроде

 bindingSource1.DataSource = customers;

//you still need to tell the combo box what to show
comboBox1.DisplayMember = "SomeText"; 
comboBox1.ValueMember = "SomeValue";
  

Затем, когда вы добавляете новые данные в свой список клиентов, просто вызовите:

 bindingSource1.ResetBindings(false);
  

Ответ №2:

При привязке к строкам это обычно так же просто, как:

 List<string> items = new List<string> { "One", "Two", "Three" };
comboBox1.DataSource = items;
  

Но если вы используете objects, это может быть немного сложнее:

Задан объект «TestObject»

 public class TestObject
{
    public string SomeText { get; set; }
    public int SomeValue { get; set; }
}
  

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

 comboBox1.DataSource = new List<TestObject> 
{ 
    new TestObject { SomeText = "One", SomeValue = 1 },
    new TestObject { SomeText = "Two", SomeValue = 2 },
    new TestObject { SomeText = "Three", SomeValue = 3 }
};
comboBox1.DisplayMember = "SomeText";
comboBox1.ValueMember = "SomeValue";
  

«DisplayMember» и «ValueMember» — это имена свойств объекта, которые вы хотите отображать и использовать в качестве значений соответственно.

Комментарии:

1. Я уже знаю привязку… Я хочу автоматически повторно привязать его при добавлении клиента..

2. Тогда лучшим вариантом может быть привязка источников. Смотрите мой второй ответ.