#c# #winforms #binding
#c# #winforms #привязка
Вопрос:
В моем проекте у меня есть две формы BillEntry и CustomerEntry.
В CustomerEntry добавляются новые клиенты.
Здесь при нажатии кнопки 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. Тогда лучшим вариантом может быть привязка источников. Смотрите мой второй ответ.