CST238 Week 7 • Questions / Concerns? • Announcements – HW#2 due today (project concept/preliminary design) – Check-off Take Home lab#6 • Friday is the last day to withdraw from class. • GUI Bloopers presentations (#3&#4) • New topics – Data Binding • Coming up: – GUI Presentation #5 & #6 next Monday – WPF vs Windows Forms – Work on Final Project • Take Home Lab#7 Why Data Binding? • Windows Forms Problem – There is no clear separation of user interface and data. – Controls and data are tightly coupled. • Data binding doesn’t address this problem of tightly coupled UI and data, but it saves programmers some work: – Don’t have to write code to move data in and out of controls. Data Binding • One-way: Automatically populating controls with data – Set a few properties • Two-way: Automatically propagating changes to data – From control to data source Data Binding • Core capability of .NET controls – Web and Windows – Built in at base Control level • Interface-based – An interface contains only the signatures of methods, properties, or events . – A class or struct that implements the interface must implement the members of the interface that are specified in the interface definition. Data Binding • Simple data binding • Bind a single value from a data collection to a single control property • Ex: customer name to Text property on Textbox • Complex data binding • Bind collection of data to control that presents multiple values from collection • Ex: customers table in grid, customer name values in combo box. Data Binding • Simple data binding – Create a Binding object – Add to DataBindings collection of control • Complex data binding – Set data source – Set data member – DisplayMember and ValueMember for ComboBox and List Box controls C#: Fields & Properties of an object • Fields – Internal data / state of an object. (ex. age) – Fields should not be public. – How do you access the field then? • Through methods (GetAge, SetAge) • Method – Behavior. – Getters/setters are not really behavior though. • Property – Another way to access the field C#: Property class Student { private int age; //private field public int Age //Public property { get {return age;} set { age = value;} }… Student aStudent = new Student(); aStudent.age = 35; aStudent.Age = 35; //value is 35 if (aStudent.Age == 35) … C#: Property class Student { private int age; //private field public int Age //Public property { get {return age;} set { age = value;} }… public int Age {get; set;} Simple Data Binding • Binding object which binds control properties to object properties. Lastname Smith Firstname Gail ID 918111111 Registered true aStudent aStudent = new Student("Smith", "Gail", "918111111", true); LastnameBox.DataBindings.Add("Text", aStudent, "Lastname"); FirstnameBox.DataBindings.Add("Text", aStudent, "Firstname"); IDBox.DataBindings.Add("Text", aStudent, "ID"); RegisteredCheckbox.DataBindings.Add("Checked", aStudent, "Registered"); Simple Data Binding • Binding object which binds control properties to object properties. Lastname Smith Firstname Gail ID 918111111 Registered true aStudent = new Student("Smith", "Gail", "918111111", true); LastnameBox.DataBindings.Add("Text", aStudent, "Lastname“, true, DataSourceUpdateMode.OnPropertyChanged); FirstnameBox.DataBindings.Add("Text", aStudent, "Firstname“, true, DataSourceUpdateMode.OnPropertyChanged); IDBox.DataBindings.Add("Text", aStudent, "ID“, true, DataSourceUpdateMode.Never); RegisteredCheckbox.DataBindings.Add("Checked", aStudent, "Registered“, true, DataSourceUpdateMode.OnPropertyChanged); Complex Data Binding • Bind a collection of data to a control • Collection must implement IList or IListSource interface • Student Major List demo – Tab Control – Combo box & binding • DisplayMember (MajorName object property) , ValueMember (MajorCode object property) • DataSource – Listbox, query & binding • DataSource, DisplayMember – Datagrid view • DataSource Take-Home Lab #7 • Create a Category class with 2 properties: – CategoryID (int) – CategoryName (string) • Create a Product class with 4 properties: – ProductName (string) – CategoryID (int) – Unit Price (float) – OnSale (bool) Take Home Lab #7 • Create a form: – Combo box to show the list of product categories – Listbox to show the products – Textboxes and checkbox bound to selected product.