How to: Implement the IListSource Interface
.NET Framework 4.5
Implement the IListSource interface to create a bindable class that does not implement IList but instead provides a list from another location.
The following code example demonstrates how to implement the IListSource interface. A component named EmployeeListSource exposes an IList for data binding by implementing the GetList method.
using System; using System.Collections.Generic; using System.Text; using System.ComponentModel; namespace IListSourceCS { public class EmployeeListSource : Component, IListSource { public EmployeeListSource() {} public EmployeeListSource(IContainer container) { container.Add(this); } #region IListSource Members bool IListSource.ContainsListCollection { get { return false; } } System.Collections.IList IListSource.GetList() { BindingList<Employee> ble = new BindingList<Employee>(); if (!this.DesignMode) { ble.Add(new Employee("Aaberg, Jesper", 26000000)); ble.Add(new Employee("Cajhen, Janko", 19600000)); ble.Add(new Employee("Furse, Kari", 19000000)); ble.Add(new Employee("Langhorn, Carl", 16000000)); ble.Add(new Employee("Todorov, Teodor", 15700000)); ble.Add(new Employee("Vereb�lyi, �gnes", 15700000)); } return ble; } #endregion } }
using System; using System.Collections.Generic; using System.Text; using System.ComponentModel; namespace IListSourceCS { public class Employee : BusinessObjectBase { private string _id; private string _name; private Decimal parkingId; public Employee() : this(string.Empty, 0) {} public Employee(string name) : this(name, 0) {} public Employee(string name, Decimal parkingId) : base() { this._id = System.Guid.NewGuid().ToString(); // Set values this.Name = name; this.ParkingID = parkingId; } public string ID { get { return _id; } } const string NAME = "Name"; public string Name { get { return _name; } set { if (_name != value) { _name = value; // Raise the PropertyChanged event. OnPropertyChanged(NAME); } } } const string PARKING_ID = "Salary"; public Decimal ParkingID { get { return parkingId; } set { if (parkingId != value) { parkingId = value; // Raise the PropertyChanged event. OnPropertyChanged(PARKING_ID); } } } } }
using System; using System.Collections.Generic; using System.Text; using System.ComponentModel; using System.Diagnostics; namespace IListSourceCS { public class BusinessObjectBase : INotifyPropertyChanged { #region INotifyPropertyChanged Members public event PropertyChangedEventHandler PropertyChanged; protected virtual void OnPropertyChanged(string propertyName) { OnPropertyChanged(new PropertyChangedEventArgs(propertyName)); } private void OnPropertyChanged(PropertyChangedEventArgs e) { if (null != PropertyChanged) { PropertyChanged(this, e); } } #endregion } }
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace IListSourceCS { public class Form1 : Form { private System.ComponentModel.IContainer components = null; private FlowLayoutPanel flowLayoutPanel1; private Label label2; private DataGridView dataGridView1; private DataGridViewTextBoxColumn nameDataGridViewTextBoxColumn; private DataGridViewTextBoxColumn salaryDataGridViewTextBoxColumn; private DataGridViewTextBoxColumn iDDataGridViewTextBoxColumn; private EmployeeListSource employeeListSource1; public Form1() { InitializeComponent(); } protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows Form Designer generated code private void InitializeComponent() { this.components = new System.ComponentModel.Container(); System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel(); this.label2 = new System.Windows.Forms.Label(); this.dataGridView1 = new System.Windows.Forms.DataGridView(); this.nameDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.salaryDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.iDDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.employeeListSource1 = new EmployeeListSource(this.components); this.flowLayoutPanel1.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit(); this.SuspendLayout(); // // flowLayoutPanel1 // this.flowLayoutPanel1.AutoSize = true; this.flowLayoutPanel1.Controls.Add(this.label2); this.flowLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Top; this.flowLayoutPanel1.Location = new System.Drawing.Point(0, 0); this.flowLayoutPanel1.Name = "flowLayoutPanel1"; this.flowLayoutPanel1.Size = new System.Drawing.Size(416, 51); this.flowLayoutPanel1.TabIndex = 11; // // label2 // this.label2.AutoSize = true; this.label2.Location = new System.Drawing.Point(3, 6); this.label2.Margin = new System.Windows.Forms.Padding(3, 6, 3, 6); this.label2.Name = "label2"; this.label2.Size = new System.Drawing.Size(408, 39); this.label2.TabIndex = 0; this.label2.Text = "This sample demonstrates how to implement the IListSource interface. In this sam" + "ple, a DataGridView is bound at design time to a Component (employeeListSource1)" + " that implements IListSource."; // // dataGridView1 // this.dataGridView1.AllowUserToAddRows = false; this.dataGridView1.AllowUserToDeleteRows = false; dataGridViewCellStyle1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(192))))); this.dataGridView1.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle1; this.dataGridView1.AutoGenerateColumns = false; this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; this.dataGridView1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { this.nameDataGridViewTextBoxColumn, this.salaryDataGridViewTextBoxColumn, this.iDDataGridViewTextBoxColumn}); this.dataGridView1.DataSource = this.employeeListSource1; this.dataGridView1.Dock = System.Windows.Forms.DockStyle.Fill; this.dataGridView1.Location = new System.Drawing.Point(0, 51); this.dataGridView1.Name = "dataGridView1"; this.dataGridView1.RowHeadersVisible = false; this.dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect; this.dataGridView1.Size = new System.Drawing.Size(416, 215); this.dataGridView1.TabIndex = 12; // // nameDataGridViewTextBoxColumn // this.nameDataGridViewTextBoxColumn.DataPropertyName = "Name"; this.nameDataGridViewTextBoxColumn.FillWeight = 131.7987F; this.nameDataGridViewTextBoxColumn.HeaderText = "Name"; this.nameDataGridViewTextBoxColumn.Name = "nameDataGridViewTextBoxColumn"; // // salaryDataGridViewTextBoxColumn // this.salaryDataGridViewTextBoxColumn.DataPropertyName = "ParkingID"; this.salaryDataGridViewTextBoxColumn.DefaultCellStyle = dataGridViewCellStyle2; this.salaryDataGridViewTextBoxColumn.FillWeight = 121.8274F; this.salaryDataGridViewTextBoxColumn.HeaderText = "Parking ID"; this.salaryDataGridViewTextBoxColumn.Name = "salaryDataGridViewTextBoxColumn"; // // iDDataGridViewTextBoxColumn // this.iDDataGridViewTextBoxColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; this.iDDataGridViewTextBoxColumn.DataPropertyName = "ID"; this.iDDataGridViewTextBoxColumn.FillWeight = 46.37391F; this.iDDataGridViewTextBoxColumn.HeaderText = "ID"; this.iDDataGridViewTextBoxColumn.Name = "iDDataGridViewTextBoxColumn"; this.iDDataGridViewTextBoxColumn.ReadOnly = true; // // Form1 // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(416, 266); this.Controls.Add(this.dataGridView1); this.Controls.Add(this.flowLayoutPanel1); this.Name = "Form1"; this.Text = "IListSource Sample"; this.flowLayoutPanel1.ResumeLayout(false); this.flowLayoutPanel1.PerformLayout(); ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit(); this.ResumeLayout(false); this.PerformLayout(); } #endregion } static class Program { [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } } }