Csharp/C Sharp/GUI Windows Form/ListBox Data Binding

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

Data ListBox Binding 3

/*
User Interfaces in C#: Windows Forms and Custom Controls
by Matthew MacDonald
Publisher: Apress
ISBN: 1590590457
*/
using System;
using System.Drawing;
using System.Collections;
using System.ruponentModel;
using System.Windows.Forms;
using System.Data;
namespace ADO.NET_Binding
{
    /// <summary>
    /// Summary description for DataListBinding.
    /// </summary>
    public class DataListBinding : System.Windows.Forms.Form
    {
        internal System.Windows.Forms.ListBox lstName;
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ruponentModel.Container components = null;
        public DataListBinding()
        {
            //
            // Required for Windows Form Designer support
            //
            InitializeComponent();
            //
            // TODO: Add any constructor code after InitializeComponent call
            //
        }
        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        protected override void Dispose( bool disposing )
        {
            if( disposing )
            {
                if(components != null)
                {
                    components.Dispose();
                }
            }
            base.Dispose( disposing );
        }
        #region Windows Form Designer generated code
        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.lstName = new System.Windows.Forms.ListBox();
            this.SuspendLayout();
            // 
            // lstName
            // 
            this.lstName.Anchor = (((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
                | System.Windows.Forms.AnchorStyles.Left) 
                | System.Windows.Forms.AnchorStyles.Right);
            this.lstName.IntegralHeight = false;
            this.lstName.Location = new System.Drawing.Point(8, 8);
            this.lstName.Name = "lstName";
            this.lstName.Size = new System.Drawing.Size(232, 184);
            this.lstName.TabIndex = 1;
            // 
            // DataListBinding
            // 
            this.AutoScaleBaseSize = new System.Drawing.Size(5, 14);
            this.ClientSize = new System.Drawing.Size(248, 202);
            this.Controls.AddRange(new System.Windows.Forms.Control[] {
                                                                          this.lstName});
            this.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
            this.Name = "DataListBinding";
            this.Text = "DataListBinding";
            this.Load += new System.EventHandler(this.DataListBinding_Load);
            this.ResumeLayout(false);
        }
        #endregion
        private void DataListBinding_Load(object sender, System.EventArgs e)
        {
            DataSet dsStore = new DataSet();
            dsStore.ReadXmlSchema(Application.StartupPath + "\\store.xsd");
            dsStore.ReadXml(Application.StartupPath + "\\store.xml");
            lstName.DataSource = dsStore.Tables["Products"];
            lstName.DisplayMember = "ModelName";
        }
        [STAThread]
        static void Main() 
        {
            Application.Run(new DataListBinding());
        }
    }
}

<A href="http://www.nfex.ru/Code/CSharpDownload/ADO.NETBinding.zip">ADO.NETBinding.zip( 76 k)</a>


Editable Binding

/*
User Interfaces in C#: Windows Forms and Custom Controls
by Matthew MacDonald
Publisher: Apress
ISBN: 1590590457
*/
using System;
using System.Drawing;
using System.Collections;
using System.ruponentModel;
using System.Windows.Forms;
using System.Data;
namespace ADO.NET_Binding
{
    /// <summary>
    /// Summary description for EditableBinding.
    /// </summary>
    public class EditableBinding : System.Windows.Forms.Form
    {
        internal System.Windows.Forms.Label Label4;
        internal System.Windows.Forms.GroupBox GroupBox1;
        internal System.Windows.Forms.Label Label3;
        internal System.Windows.Forms.Label Label2;
        internal System.Windows.Forms.Label Label1;
        internal System.Windows.Forms.TextBox txtModelName;
        internal System.Windows.Forms.TextBox txtDescription;
        internal System.Windows.Forms.TextBox txtUnitCost;
        internal System.Windows.Forms.TextBox txtModelNumber;
        internal System.Windows.Forms.ruboBox cboModelName;
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ruponentModel.Container components = null;
        public EditableBinding()
        {
            //
            // Required for Windows Form Designer support
            //
            InitializeComponent();
            //
            // TODO: Add any constructor code after InitializeComponent call
            //
        }
        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        protected override void Dispose( bool disposing )
        {
            if( disposing )
            {
                if(components != null)
                {
                    components.Dispose();
                }
            }
            base.Dispose( disposing );
        }
        #region Windows Form Designer generated code
        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.Label4 = new System.Windows.Forms.Label();
            this.GroupBox1 = new System.Windows.Forms.GroupBox();
            this.Label3 = new System.Windows.Forms.Label();
            this.Label2 = new System.Windows.Forms.Label();
            this.Label1 = new System.Windows.Forms.Label();
            this.txtModelName = new System.Windows.Forms.TextBox();
            this.txtDescription = new System.Windows.Forms.TextBox();
            this.txtUnitCost = new System.Windows.Forms.TextBox();
            this.txtModelNumber = new System.Windows.Forms.TextBox();
            this.cboModelName = new System.Windows.Forms.ruboBox();
            this.GroupBox1.SuspendLayout();
            this.SuspendLayout();
            // 
            // Label4
            // 
            this.Label4.Location = new System.Drawing.Point(16, 17);
            this.Label4.Name = "Label4";
            this.Label4.Size = new System.Drawing.Size(88, 16);
            this.Label4.TabIndex = 20;
            this.Label4.Text = "Select a Record:";
            // 
            // GroupBox1
            // 
            this.GroupBox1.Anchor = (((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
                | System.Windows.Forms.AnchorStyles.Left) 
                | System.Windows.Forms.AnchorStyles.Right);
            this.GroupBox1.Controls.AddRange(new System.Windows.Forms.Control[] {
                                                                                    this.Label3,
                                                                                    this.Label2,
                                                                                    this.Label1,
                                                                                    this.txtModelName,
                                                                                    this.txtDescription,
                                                                                    this.txtUnitCost,
                                                                                    this.txtModelNumber});
            this.GroupBox1.Location = new System.Drawing.Point(16, 53);
            this.GroupBox1.Name = "GroupBox1";
            this.GroupBox1.Size = new System.Drawing.Size(400, 252);
            this.GroupBox1.TabIndex = 19;
            this.GroupBox1.TabStop = false;
            // 
            // Label3
            // 
            this.Label3.Location = new System.Drawing.Point(220, 56);
            this.Label3.Name = "Label3";
            this.Label3.Size = new System.Drawing.Size(36, 16);
            this.Label3.TabIndex = 18;
            this.Label3.Text = "Cost:";
            // 
            // Label2
            // 
            this.Label2.Location = new System.Drawing.Point(16, 56);
            this.Label2.Name = "Label2";
            this.Label2.Size = new System.Drawing.Size(52, 16);
            this.Label2.TabIndex = 17;
            this.Label2.Text = "Model:";
            // 
            // Label1
            // 
            this.Label1.Location = new System.Drawing.Point(16, 28);
            this.Label1.Name = "Label1";
            this.Label1.Size = new System.Drawing.Size(52, 16);
            this.Label1.TabIndex = 16;
            this.Label1.Text = "Name:";
            // 
            // txtModelName
            // 
            this.txtModelName.Location = new System.Drawing.Point(68, 24);
            this.txtModelName.Name = "txtModelName";
            this.txtModelName.Size = new System.Drawing.Size(316, 21);
            this.txtModelName.TabIndex = 15;
            this.txtModelName.Text = "";
            // 
            // txtDescription
            // 
            this.txtDescription.Location = new System.Drawing.Point(12, 92);
            this.txtDescription.Multiline = true;
            this.txtDescription.Name = "txtDescription";
            this.txtDescription.Size = new System.Drawing.Size(372, 116);
            this.txtDescription.TabIndex = 14;
            this.txtDescription.Text = "";
            // 
            // txtUnitCost
            // 
            this.txtUnitCost.Location = new System.Drawing.Point(256, 52);
            this.txtUnitCost.Name = "txtUnitCost";
            this.txtUnitCost.Size = new System.Drawing.Size(128, 21);
            this.txtUnitCost.TabIndex = 13;
            this.txtUnitCost.Text = "";
            // 
            // txtModelNumber
            // 
            this.txtModelNumber.Location = new System.Drawing.Point(68, 52);
            this.txtModelNumber.Name = "txtModelNumber";
            this.txtModelNumber.Size = new System.Drawing.Size(136, 21);
            this.txtModelNumber.TabIndex = 12;
            this.txtModelNumber.Text = "";
            // 
            // cboModelName
            // 
            this.cboModelName.DropDownStyle = System.Windows.Forms.ruboBoxStyle.DropDownList;
            this.cboModelName.Location = new System.Drawing.Point(108, 13);
            this.cboModelName.Name = "cboModelName";
            this.cboModelName.Size = new System.Drawing.Size(308, 21);
            this.cboModelName.TabIndex = 18;
            // 
            // EditableBinding
            // 
            this.AutoScaleBaseSize = new System.Drawing.Size(5, 14);
            this.ClientSize = new System.Drawing.Size(432, 318);
            this.Controls.AddRange(new System.Windows.Forms.Control[] {
                                                                          this.Label4,
                                                                          this.GroupBox1,
                                                                          this.cboModelName});
            this.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
            this.Name = "EditableBinding";
            this.Text = "EditableBinding";
            this.Load += new System.EventHandler(this.EditableBinding_Load);
            this.GroupBox1.ResumeLayout(false);
            this.ResumeLayout(false);
        }
        #endregion
        private void EditableBinding_Load(object sender, System.EventArgs e)
        {
            DataSet dsStore = new DataSet();
            dsStore.ReadXmlSchema(Application.StartupPath + "\\store.xsd");
            dsStore.ReadXml(Application.StartupPath + "\\store.xml");
            cboModelName.DataSource = dsStore.Tables["Products"];
            cboModelName.DisplayMember = "ModelName";
            txtModelName.DataBindings.Add("Text", dsStore.Tables["Products"], "ModelName");
            txtModelNumber.DataBindings.Add("Text", dsStore.Tables["Products"], "ModelNumber");
            txtUnitCost.DataBindings.Add("Text", dsStore.Tables["Products"], "UnitCost");
            txtDescription.DataBindings.Add("Text", dsStore.Tables["Products"], "Description");
        }
        [STAThread]
        static void Main() 
        {
            Application.Run(new EditableBinding());
        }
    }
}

<A href="http://www.nfex.ru/Code/CSharpDownload/ADO.NETBinding.zip">ADO.NETBinding.zip( 76 k)</a>


ListBox: Binding Unusual Properties

/*
User Interfaces in C#: Windows Forms and Custom Controls
by Matthew MacDonald
Publisher: Apress
ISBN: 1590590457
*/
using System;
using System.Drawing;
using System.Collections;
using System.ruponentModel;
using System.Windows.Forms;
using System.Drawing.Text;
namespace DataBinding101
{
    /// <summary>
    /// Summary description for BindingUnusualProperties.
    /// </summary>
    public class BindingUnusualProperties : System.Windows.Forms.Form
    {
        internal System.Windows.Forms.Label Label2;
        internal System.Windows.Forms.Label Label1;
        internal System.Windows.Forms.ListBox lstFonts;
        internal System.Windows.Forms.Label lblSampleText;
        internal System.Windows.Forms.ListBox lstColors;
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ruponentModel.Container components = null;
        public BindingUnusualProperties()
        {
            //
            // Required for Windows Form Designer support
            //
            InitializeComponent();
            //
            // TODO: Add any constructor code after InitializeComponent call
            //
        }
        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        protected override void Dispose( bool disposing )
        {
            if( disposing )
            {
                if(components != null)
                {
                    components.Dispose();
                }
            }
            base.Dispose( disposing );
        }
        #region Windows Form Designer generated code
        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.Label2 = new System.Windows.Forms.Label();
            this.Label1 = new System.Windows.Forms.Label();
            this.lstFonts = new System.Windows.Forms.ListBox();
            this.lblSampleText = new System.Windows.Forms.Label();
            this.lstColors = new System.Windows.Forms.ListBox();
            this.SuspendLayout();
            // 
            // Label2
            // 
            this.Label2.Location = new System.Drawing.Point(210, 13);
            this.Label2.Name = "Label2";
            this.Label2.Size = new System.Drawing.Size(140, 12);
            this.Label2.TabIndex = 9;
            this.Label2.Text = "Choose a Font:";
            // 
            // Label1
            // 
            this.Label1.Location = new System.Drawing.Point(14, 13);
            this.Label1.Name = "Label1";
            this.Label1.Size = new System.Drawing.Size(140, 12);
            this.Label1.TabIndex = 8;
            this.Label1.Text = "Choose a Color:";
            // 
            // lstFonts
            // 
            this.lstFonts.Location = new System.Drawing.Point(210, 29);
            this.lstFonts.Name = "lstFonts";
            this.lstFonts.Size = new System.Drawing.Size(180, 134);
            this.lstFonts.TabIndex = 7;
            // 
            // lblSampleText
            // 
            this.lblSampleText.Anchor = (((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
                | System.Windows.Forms.AnchorStyles.Left) 
                | System.Windows.Forms.AnchorStyles.Right);
            this.lblSampleText.Location = new System.Drawing.Point(18, 185);
            this.lblSampleText.Name = "lblSampleText";
            this.lblSampleText.Size = new System.Drawing.Size(372, 96);
            this.lblSampleText.TabIndex = 6;
            this.lblSampleText.Text = "Click an item in one of the lists above to change the font or color of this text." +
                " Once the initial conditions are set up (i.e., the binding), this operation happ" +
                "ens automatically.";
            // 
            // lstColors
            // 
            this.lstColors.Location = new System.Drawing.Point(14, 29);
            this.lstColors.Name = "lstColors";
            this.lstColors.Size = new System.Drawing.Size(176, 134);
            this.lstColors.TabIndex = 5;
            // 
            // BindingUnusualProperties
            // 
            this.AutoScaleBaseSize = new System.Drawing.Size(5, 14);
            this.ClientSize = new System.Drawing.Size(404, 294);
            this.Controls.AddRange(new System.Windows.Forms.Control[] {
                                                                          this.Label2,
                                                                          this.Label1,
                                                                          this.lstFonts,
                                                                          this.lblSampleText,
                                                                          this.lstColors});
            this.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
            this.Name = "BindingUnusualProperties";
            this.Text = "Binding Unusual Properties";
            this.Load += new System.EventHandler(this.BindingUnusualProperties_Load);
            this.ResumeLayout(false);
        }
        #endregion
        private void BindingUnusualProperties_Load(object sender, System.EventArgs e)
        {
            // These are our final data sources: two ArrayList objects.
            ArrayList fontObjList = new ArrayList();
            ArrayList colorObjList = new ArrayList();
            // The InstalledFonts collection allows us to enumerate installed fonts.
            // Each FontFamily needs to be converted to a genuine Font object
            // before it is suitable for data binding to the Control.Font property.
            InstalledFontCollection InstalledFonts = new InstalledFontCollection();
            foreach (FontFamily family in InstalledFonts.Families)
            {
                try
                {
                    fontObjList.Add(new Font(family, 12));
                }
                catch
                {
                    // We end up here if the font could not be created
                    // with the default style.
                }
            }
            // In order to retrieve the list of colors, we need to first retrieve
            // the strings for the KnownColor enumeration, and then convert each one
            // into a suitable color object.
            string[] colorNames;
            colorNames = System.Enum.GetNames(typeof(KnownColor));
            TypeConverter cnvrt = TypeDescriptor.GetConverter(typeof(KnownColor));
            foreach (string colorName in colorNames)
            {
                colorObjList.Add(Color.FromKnownColor((KnownColor)cnvrt.ConvertFromString(colorName)));
            }
            // We can now bind both our list controls.
            lstColors.DataSource = colorObjList;
            lstColors.DisplayMember = "Name";
            lstFonts.DataSource = fontObjList;
            lstFonts.DisplayMember = "Name";
            // The label is bound to both data sources.
            lblSampleText.DataBindings.Add("ForeColor", colorObjList, "");
            lblSampleText.DataBindings.Add("Font", fontObjList, "");
        }
        
        [STAThread]
        static void Main() 
        {
            Application.Run(new BindingUnusualProperties());
        }
    }
}


Object List Binding

/*
User Interfaces in C#: Windows Forms and Custom Controls
by Matthew MacDonald
Publisher: Apress
ISBN: 1590590457
*/

using System;
using System.Drawing;
using System.Collections;
using System.ruponentModel;
using System.Windows.Forms;
namespace DataBinding101
{
    /// <summary>
    /// Summary description for ObjectListBinding.
    /// </summary>
    public class ObjectListBinding : System.Windows.Forms.Form
    {
        internal System.Windows.Forms.ListBox lstCity;
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ruponentModel.Container components = null;
        public ObjectListBinding()
        {
            //
            // Required for Windows Form Designer support
            //
            InitializeComponent();
            //
            // TODO: Add any constructor code after InitializeComponent call
            //
        }
        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        protected override void Dispose( bool disposing )
        {
            if( disposing )
            {
                if(components != null)
                {
                    components.Dispose();
                }
            }
            base.Dispose( disposing );
        }
        #region Windows Form Designer generated code
        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.lstCity = new System.Windows.Forms.ListBox();
            this.SuspendLayout();
            // 
            // lstCity
            // 
            this.lstCity.Anchor = (((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
                | System.Windows.Forms.AnchorStyles.Left) 
                | System.Windows.Forms.AnchorStyles.Right);
            this.lstCity.IntegralHeight = false;
            this.lstCity.Location = new System.Drawing.Point(4, 4);
            this.lstCity.Name = "lstCity";
            this.lstCity.Size = new System.Drawing.Size(252, 216);
            this.lstCity.TabIndex = 2;
            this.lstCity.DoubleClick += new System.EventHandler(this.lstCity_DoubleClick);
            // 
            // ObjectListBinding
            // 
            this.AutoScaleBaseSize = new System.Drawing.Size(5, 14);
            this.ClientSize = new System.Drawing.Size(268, 230);
            this.Controls.AddRange(new System.Windows.Forms.Control[] {
                                                                          this.lstCity});
            this.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
            this.Name = "ObjectListBinding";
            this.Text = "ObjectListBinding";
            this.Load += new System.EventHandler(this.ObjectListBinding_Load);
            this.ResumeLayout(false);
        }
        #endregion
        private void ObjectListBinding_Load(object sender, System.EventArgs e)
        {
            City[] cityChoices = {new City("Seattle", "U.S.A."), 
                                     new City("New York", "U.S.A."), new City("Tokyo", "Japan"), 
                                     new City("Montreal", "Canada")};
            lstCity.DataSource = cityChoices;
            lstCity.DisplayMember = "Name";
        }
        private void lstCity_DoubleClick(object sender, System.EventArgs e)
        {
                MessageBox.Show(((City)lstCity.SelectedItem).Country);
        }
        [STAThread]
        static void Main() 
        {
            Application.Run(new ObjectListBinding());
        }
    }
    public class City
    {
        private string name;
        private string country;
        public string Name
        {
            get
            {
                return name;
            }
            set
            {
                name = value;
            }
        }
        public string Country
        {
            get
            {
                return country;
            }
            set
            {
                country = value;
            }
        }
        public City(string name, string country)
        {
            this.Name = name;
            this.Country = country;
        }
    }
}


Object ListBox Data Binding 2

/*
User Interfaces in C#: Windows Forms and Custom Controls
by Matthew MacDonald
Publisher: Apress
ISBN: 1590590457
*/
using System;
using System.Drawing;
using System.Collections;
using System.ruponentModel;
using System.Windows.Forms;
namespace DataBinding101
{
    /// <summary>
    /// Summary description for ObjectListBinding2.
    /// </summary>
    public class ObjectListBinding2 : System.Windows.Forms.Form
    {
        internal System.Windows.Forms.ListBox lstCity;
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ruponentModel.Container components = null;
        public ObjectListBinding2()
        {
            //
            // Required for Windows Form Designer support
            //
            InitializeComponent();
            //
            // TODO: Add any constructor code after InitializeComponent call
            //
        }
        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        protected override void Dispose( bool disposing )
        {
            if( disposing )
            {
                if(components != null)
                {
                    components.Dispose();
                }
            }
            base.Dispose( disposing );
        }
        #region Windows Form Designer generated code
        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.lstCity = new System.Windows.Forms.ListBox();
            this.SuspendLayout();
            // 
            // lstCity
            // 
            this.lstCity.Anchor = (((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
                | System.Windows.Forms.AnchorStyles.Left) 
                | System.Windows.Forms.AnchorStyles.Right);
            this.lstCity.IntegralHeight = false;
            this.lstCity.Location = new System.Drawing.Point(4, 9);
            this.lstCity.Name = "lstCity";
            this.lstCity.Size = new System.Drawing.Size(248, 216);
            this.lstCity.TabIndex = 3;
            // 
            // ObjectListBinding2
            // 
            this.AutoScaleBaseSize = new System.Drawing.Size(5, 14);
            this.ClientSize = new System.Drawing.Size(260, 234);
            this.Controls.AddRange(new System.Windows.Forms.Control[] {
                                                                          this.lstCity});
            this.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
            this.Name = "ObjectListBinding2";
            this.Text = "ObjectListBinding2";
            this.Load += new System.EventHandler(this.ObjectListBinding2_Load);
            this.ResumeLayout(false);
        }
        #endregion
        [STAThread]
        static void Main() 
        {
            Application.Run(new ObjectListBinding2());
        }
        private void ObjectListBinding2_Load(object sender, System.EventArgs e)
        {
            City2[] cityChoices = {new City2("Seattle", "U.S.A."), 
                                     new City2("New York", "U.S.A."), new City2("Tokyo", "Japan"), 
                                     new City2("Montreal", "Canada")};
            lstCity.DataSource = cityChoices;
        }
    
    }
    public class City2
    {
        private string name;
        private string country;
        public string Name
        {
            get
            {
                return name;
            }
            set
            {
                name = value;
            }
        }
        public string Country
        {
            get
            {
                return country;
            }
            set
            {
                country = value;
            }
        }
        public City2(string name, string country)
        {
            this.Name = name;
            this.Country = country;
        }
        public override string ToString()
        {
            return Name + ", " + Country;
        }
    }
}


Single Item Data Binding

/*
User Interfaces in C#: Windows Forms and Custom Controls
by Matthew MacDonald
Publisher: Apress
ISBN: 1590590457
*/
using System;
using System.Drawing;
using System.Collections;
using System.ruponentModel;
using System.Windows.Forms;
namespace DataBinding101
{
    /// <summary>
    /// Summary description for SingleItemDataBinding.
    /// </summary>
    public class SingleItemDataBinding : System.Windows.Forms.Form
    {
        internal System.Windows.Forms.ListBox lstCity;
        internal System.Windows.Forms.TextBox txtCity;
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ruponentModel.Container components = null;
        public SingleItemDataBinding()
        {
            //
            // Required for Windows Form Designer support
            //
            InitializeComponent();
            //
            // TODO: Add any constructor code after InitializeComponent call
            //
        }
        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        protected override void Dispose( bool disposing )
        {
            if( disposing )
            {
                if(components != null)
                {
                    components.Dispose();
                }
            }
            base.Dispose( disposing );
        }
        #region Windows Form Designer generated code
        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.lstCity = new System.Windows.Forms.ListBox();
            this.txtCity = new System.Windows.Forms.TextBox();
            this.SuspendLayout();
            // 
            // lstCity
            // 
            this.lstCity.Anchor = (((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
                | System.Windows.Forms.AnchorStyles.Left) 
                | System.Windows.Forms.AnchorStyles.Right);
            this.lstCity.IntegralHeight = false;
            this.lstCity.Location = new System.Drawing.Point(12, 40);
            this.lstCity.Name = "lstCity";
            this.lstCity.Size = new System.Drawing.Size(224, 148);
            this.lstCity.TabIndex = 3;
            // 
            // txtCity
            // 
            this.txtCity.Anchor = ((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
                | System.Windows.Forms.AnchorStyles.Right);
            this.txtCity.Location = new System.Drawing.Point(12, 12);
            this.txtCity.Name = "txtCity";
            this.txtCity.Size = new System.Drawing.Size(224, 21);
            this.txtCity.TabIndex = 2;
            this.txtCity.Text = "";
            // 
            // SingleItemDataBinding
            // 
            this.AutoScaleBaseSize = new System.Drawing.Size(5, 14);
            this.ClientSize = new System.Drawing.Size(248, 202);
            this.Controls.AddRange(new System.Windows.Forms.Control[] {
                                                                          this.lstCity,
                                                                          this.txtCity});
            this.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
            this.Name = "SingleItemDataBinding";
            this.Text = "SingleItemDataBinding";
            this.Load += new System.EventHandler(this.SingleItemDataBinding_Load);
            this.ResumeLayout(false);
        }
        #endregion
        private void SingleItemDataBinding_Load(object sender, System.EventArgs e)
        {
             string[] cityChoices = {"Seattle", "New York", "Tokyo", "Montreal"};
            lstCity.DataSource = cityChoices;
            txtCity.DataBindings.Add("Text", cityChoices, "");
        }
        [STAThread]
        static void Main() 
        {
            Application.Run(new SingleItemDataBinding());
        }
    }
}