Это заголовок, в котором значения привязаны к некоторым текстовым полям:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
var dataSet = new DataSet();
var bindingSource = new BindingSource();
bindingSource.DataSource = dataSet.ReadXml("data.xml");
comboBox1.DisplayMember = "Name";
comboBox1.DataSource = dataSet.Tables[0];
tbName.DataBindings.Add("Text", comboBox1.SelectedItem, "Name");
tbType.DataBindings.Add("Text", comboBox1.SelectedItem, "type");
tbLiving.DataBindings.Add("Text", comboBox1.SelectedItem, "living");
}
}
РЕДАКТИРОВАТЬ:
Полный пример помещает содержимое чтения XML-файла в класс и связываетко всем элементам управления.
Привет @Jimi для Привязка TextBox к ListBox SelectedItem . Это очень помогло как ориентация.
public partial class Form1 : Form
{
#region Private Members
/// <summary>
/// The content list to bind to.
/// </summary>
private BindingList<Data> mData = null;
/// <summary>
/// The item to bind to.
/// </summary>
private BindingSource mDataSource = null;
#endregion
#region Constructor
/// <summary>
/// Default constructor.
/// </summary>
public Form1()
{
InitializeComponent();
// Get binding content
mData = GetXmlData("data.xml");
// Prepare the binding source from the read content
mDataSource = new BindingSource(mData, null);
// Set what is to be displayed
comboBox1.DisplayMember = "Name";
comboBox1.DataSource = mDataSource;
// Bind textboxes
tbName.DataBindings.Add(new Binding("Text", mDataSource, "Name", false, DataSourceUpdateMode.OnPropertyChanged));
tbType.DataBindings.Add(new Binding("Text", mDataSource, "type", false, DataSourceUpdateMode.OnPropertyChanged));
tbLiving.DataBindings.Add(new Binding("Text", mDataSource, "living", false, DataSourceUpdateMode.OnPropertyChanged));
}
#endregion
/// <summary>
/// Reads the provided XML file and puts it into a structured binding list.
/// </summary>
/// <returns></returns>
private BindingList<Data> GetXmlData(string xmlFile)
{
// Create a data set and read the file
var dataSet = new DataSet();
dataSet.ReadXml(xmlFile);
// Convert the content to a List<Data>
var data = dataSet.Tables[0].AsEnumerable().Select(r => new Data
{
Name = r.Field<string>("Name"),
Type = r.Field<string>("type"),
Living = r.Field<string>("living")
}).ToList();
// Return the content as BindingList<Data>
return new BindingList<Data>(data);
}
}
В этом случае вам понадобится класс для помещения содержимого файла. Класс Data
выглядит следующим образом:
/// <summary>
/// The structure of a read XML file.
/// </summary>
public class Data
{
/// <summary>
/// The name of an item.
/// </summary>
public string Name { get; set; }
/// <summary>
/// The type of an item.
/// </summary>
public string Type { get; set; }
/// <summary>
/// The living space of an item.
/// </summary>
public string Living { get; set; }
}
Ранее упоминалось, что для работы с двойными данными необходим уникальный идентификатор. Здесь нет. Поле со списком привязывается к объектам Data
и является уникальным для себя.