Вы действительно имеете в виду "словарь"? Привязка Winform в порядке со списками (IList
/ IListSource
), но не со словарем. Кроме того, ListView
не так легко связать, как некоторые другие элементы управления.
Кроме этого, он должен работать исключительно с использованием имен сопоставлений - я постараюсь сделать простой пример ...
Редактировать с базовым примером из Northwind; обратите внимание, что в идеале контекст данных не должен быть долгоживущим; Вы также можете посмотреть на такие вещи, как реализации репозитория, а не на прямую привязку:
using System;
using System.Windows.Forms;
using SomeNamespaceWithMyDataContext;
static class Program
{
[STAThread]
static void Main() {
MyDataContext ctx = new MyDataContext();
BindingSource custs = new BindingSource() {
DataSource = ctx.Customers};
BindingSource orders = new BindingSource {
DataMember = "Orders", DataSource = custs};
Button btn;
using (Form form = new Form
{
Controls = {
new DataGridView() {
DataSource = orders, DataMember = "Order_Details",
Dock = DockStyle.Fill},
new ComboBox() {
DataSource = orders, DisplayMember = "OrderID",
Dock = DockStyle.Top},
new ComboBox() {
DataSource = custs, DisplayMember = "CompanyName",
Dock = DockStyle.Top},
(btn = new Button() {
Text = "Save", Dock = DockStyle.Bottom
}), // **edit here re textbox etc**
new TextBox {
DataBindings = {{"Text", orders, "ShipAddress"}},
Dock = DockStyle.Bottom
},
new Label {
DataBindings = {{"Text", custs, "ContactName"}},
Dock = DockStyle.Top
},
new Label {
DataBindings = {{"Text", orders, "RequiredDate"}},
Dock = DockStyle.Bottom
}
}
})
{
btn.Click += delegate {
form.Text = "Saving...";
ctx.SubmitChanges();
form.Text = "Saved";
};
Application.Run(form);
}
}
}
В качестве отступления - обратите внимание, что синтаксис:
DataBindings = {{"Text", orders, "ShipAddress"}}
Эквивалентно:
someTextBox.DataBindings.Add("Text", orders, "ShipAddress");
(я только добавляю это, поскольку это общий вопрос)