using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace DataBindingFundamentalsSample { public partial class BindingSourceForm : Form { // Create strongly-typed list data source List raceCarDrivers = new List(); // Create a BindingSource BindingSource raceCarDriversBS = new BindingSource(); public BindingSourceForm() { InitializeComponent(); //// Populate list data source with data items //this.raceCarDrivers.Add(new RaceCarDriver("M. Schumacher", 500)); //this.raceCarDrivers.Add(new RaceCarDriver("A. Senna", 1000)); //this.raceCarDrivers.Add(new RaceCarDriver("A. Prost", 400)); // This code augments the List with IBindingList // list management and change notification capabilities // but only when used via the BindingList this.raceCarDriversBS.DataSource = this.raceCarDrivers; this.racingCarDriversDataGridView.DataSource = this.raceCarDriversBS; // Populate list data source with data items this.raceCarDriversBS.Add(new RaceCarDriver("M. Schumacher", 500)); this.raceCarDriversBS.Add(new RaceCarDriver("A. Senna", 1000)); this.raceCarDriversBS.Add(new RaceCarDriver("A. Prost", 400)); // Setup currency information handling RefreshItems(); } private void moveFirstButton_Click(object sender, EventArgs e) { this.raceCarDriversBS.MoveFirst(); RefreshItems(); } private void movePreviousButton_Click(object sender, EventArgs e) { // No need to worry about being < 0 this.raceCarDriversBS.MovePrevious(); RefreshItems(); } private void moveNextButton_Click(object sender, EventArgs e) { // No need to worry about being > this.raceCarDriversBS.Count this.raceCarDriversBS.MoveNext(); RefreshItems(); } private void moveLastButton_Click(object sender, EventArgs e) { this.raceCarDriversBS.MoveLast(); RefreshItems(); } void RefreshItems() { int count = this.raceCarDriversBS.Count; int position = this.raceCarDriversBS.Position + 1; // Update count and position text this.countLabel.Text = count.ToString(); this.positionLabel.Text = position.ToString(); // Enable/Disable move buttons this.moveFirstButton.Enabled = (position > 1); this.movePreviousButton.Enabled = (position > 1); this.moveNextButton.Enabled = (position < count); this.moveLastButton.Enabled = (position < count); } private void addButton_Click(object sender, EventArgs e) { // Add item to list data source directly RaceCarDriver raceCarDriver = new RaceCarDriver("Nelson Piquet", 300); this.raceCarDriversBS.Add(raceCarDriver); // Select new item this.raceCarDriversBS.Position = this.raceCarDriversBS.Count - 1; } private void deleteButton_Click(object sender, EventArgs e) { // Remove item from list data source directly this.raceCarDriversBS.Remove((RaceCarDriver)this.raceCarDriversBS.Current); } private void updateCurrentButton_Click(object sender, EventArgs e) { int current = this.raceCarDriversBS.Position; ((RaceCarDriver)this.raceCarDriversBS[current]).Wins++; } } }