CollectionView for WinForms
クイックスタート

This quick start will guide you through the steps of adding a DataGridView control to your application and add data to it using the C1CollectionView class.

Complete the steps given below to see how the DataGridView control appears after data binding:

  1. Create a data source
  2. Bind DataGridView to the data source

The following image shows how the DataGridView control appears after completing the steps above.

Step 1: Create a data source

  1. Add a new class file, Customer, to the application.
  2. Add the following code to the Customer file. In this example, we are using Customer class to represent data in the DataGridView control.
    Public Class Customer
        Private _id, _countryId As Integer
        Private _name, _email, _city As String
        Private _OrderDate As DateTime
        Private _orderTotal As Double
    
        Shared _rnd As Random = New Random()
        Shared _firstNames As String() = "Andy|Ben|Charlie|Dan|Ed|Fred|Herb|Jack|Mark|Ted".Split("|"c)
        Shared _lastNames As String() = "Ambers|Bishop|Cole|Danson|Evers|Frommer|Heath|Myers|Richards|Stevens".Split("|"c)
        Shared _emailServers As String() = "gmail|yahoo|outlook|aol".Split("|"c)
        Shared countries As String = 
           "China-Beijing,Shanghai|India-Delhi,Kolkata|United States-Washington,New York|Russia-Moscow,Saint Petersburg|Japan-Tokio,Yokohama"
        Shared _countries As KeyValuePair(Of String, String())() = 
           countries.Split("|"c).[Select](Function(str) New KeyValuePair(Of String, String())(str.Split("-"c).First(), str.Split("-"c).Skip(1).First().Split(","c))).ToArray()
    
        Public Sub New()
        End Sub
    
        Public Sub New(ByVal id As Integer)
            ID = id
            Name = GetName()
            Email = String.Format("{0}@{1}.com", (Name.Substring(0, 3)).ToLower(), GetString(_emailServers))
            CountryId = _rnd.[Next]() Mod _countries.Length
            Dim cities = _countries(CountryId).Value
            City = GetString(cities)
            OrderDate = DateTime.Today.AddDays(-_rnd.[Next](1, 365)).AddHours(_rnd.[Next](0, 24)).AddMinutes(_rnd.[Next](0, 60))
            OrderTotal = Math.Round(_rnd.NextDouble() * 10000.00, 2)
        End Sub
    
        Public Property ID As Integer
            Get
                Return _id
            End Get
            Set(ByVal value As Integer)
    
                If value <> _id Then
                    _id = value
                End If
            End Set
        End Property
    
        Public Property Name As String
            Get
                Return _name
            End Get
            Set(ByVal value As String)
    
                If value <> _name Then
                    _name = value
                End If
            End Set
        End Property
    
        Public Property Email As String
            Get
                Return _email
            End Get
            Set(ByVal value As String)
    
                If value <> _email Then
                    _email = value
                End If
            End Set
        End Property
    
        Public Property City As String
            Get
                Return _city
            End Get
            Set(ByVal value As String)
    
                If value <> _city Then
                    _city = value
                End If
            End Set
        End Property
    
        Public Property CountryId As Integer
            Get
                Return _countryId
            End Get
            Set(ByVal value As Integer)
    
                If value <> _countryId AndAlso value > -1 AndAlso value < _countries.Length Then
                    _countryId = value
                End If
            End Set
        End Property
    
        Public Property OrderDate As DateTime
            Get
                Return _OrderDate
            End Get
            Set(ByVal value As DateTime)
    
                If value <> _OrderDate Then
                    _OrderDate = value
                End If
            End Set
        End Property
    
        Public Property OrderTotal As Double
            Get
                Return _orderTotal
            End Get
            Set(ByVal value As Double)
    
                If value <> _orderTotal Then
                    _orderTotal = value
                End If
            End Set
        End Property
    
        Private Shared Function GetString(ByVal arr As String()) As String
            Return arr(_rnd.[Next](arr.Length))
        End Function
    
        Private Shared Function GetName() As String
            Return String.Format("{0} {1}", GetString(_firstNames), GetString(_lastNames))
        End Function
    
        Public ReadOnly Property Country As String
            Get
                Return _countries(_countryId).Key
            End Get
        End Property
    
        Public Shared Function GetCustomerList(ByVal count As Integer) As ObservableCollection(Of Customer)
            Dim list = New ObservableCollection(Of Customer)()
    
            For i As Integer = 0 To count - 1
                list.Add(New Customer(i))
            Next
    
            Return list
        End Function
    End Class
    
    public class Customer
    {
       int _id, _countryId;
       string _name, _email, _city;
       DateTime _OrderDate;
       double _orderTotal;
    
       static Random _rnd = new Random();
       static string[] _firstNames = 
          "Andy|Ben|Charlie|Dan|Ed|Fred|Herb|Jack|Mark|Ted".Split('|');
       static string[] _lastNames = 
          "Ambers|Bishop|Cole|Danson|Evers|Frommer|Heath|Myers|Richards|Stevens".Split('|');
       static string[] _emailServers = "gmail|yahoo|outlook|aol".Split('|');
       static string countries = 
          "China-Beijing,Shanghai|India-Delhi,Kolkata|United States-Washington,New York|Russia-Moscow,Saint Petersburg|Japan-Tokio,Yokohama";
       static KeyValuePair<string, string[]>[] _countries = 
          countries.Split('|').Select(str => new KeyValuePair<string, string[]>(str.Split('-').First(), 
              str.Split('-').Skip(1).First().Split(','))).ToArray();
          
            
       public Customer()
       {
       }
    
       public Customer(int id)
       {
          ID = id;
          Name = GetName();
          Email = string.Format("{0}@{1}.com", (Name.Substring(0, 3)).ToLower(), GetString(_emailServers));
          CountryId = _rnd.Next() % _countries.Length;
          var cities = _countries[CountryId].Value;
          City = GetString(cities);
          OrderDate = DateTime.Today.AddDays(-_rnd.Next(1, 365)).AddHours(_rnd.Next(0, 24)).AddMinutes(_rnd.Next(0, 60));
          OrderTotal = Math.Round(_rnd.NextDouble() * 10000.00, 2);
       }
    
       public int ID
       {
          get { return _id; }
          set
          {
              if (value != _id)
              {
                  _id = value;
              }
          }
       }
       public string Name
       {
          get { return _name; }
          set
          {
              if (value != _name)
              {
                  _name = value;
              }
          }
       }
       public string Email
       {
          get { return _email; }
          set
          {
              if (value != _email)
              {
                  _email = value;
              }
          }
       }
       public string City
       {
          get { return _city; }
          set
          {
              if (value != _city)
              {
                   _city = value;
              }
          }
       }
    
       public int CountryId
       {
          get { return _countryId; }
          set
          {
              if (value != _countryId && value > -1 && value < _countries.Length)
              {
                   _countryId = value;
              }
                }
       }
       public DateTime OrderDate
       {
          get { return _OrderDate; }
          set
          {
              if (value != _OrderDate)
              {
                  _OrderDate = value;
              }
          }
       }
    
       public double OrderTotal
       {
          get { return _orderTotal; }
          set
          {
              if (value != _orderTotal)
              {
                   _orderTotal = value;
              }
          }
       }
    
       // ** utilities
       static string GetString(string[] arr)
       {
            return arr[_rnd.Next(arr.Length)];
       }
       static string GetName()
       {
            return string.Format("{0} {1}", GetString(_firstNames), GetString(_lastNames));
       }
       public string Country
       {
            get { return _countries[_countryId].Key; }
       }
    
       // ** static list provider
       public static ObservableCollection<Customer> GetCustomerList(int count)
       {
            var list = new ObservableCollection<Customer>();
            for (int i = 0; i < count; i++)
            {
                list.Add(new Customer(i));
            }
            return list;
        }
    }
    
Back to Top

Step 2: Bind DataGridView to the data source

  1. Add the following dlls to your application to work with CollectionView:
    • C1.CollectionView.dll
    • C1.Win.CollectionView.dll

    You can also use the available CollectionView NuGet packages from the following locations:

    For information on how to add NuGet packages to your application, see Adding NuGet Packages to your App.

  2. Drag and drop the DataGridView control from the Toolbox onto your form.
  3. Switch to the Code view and add the following code to bind DataGridView to the data source.
    Dim cv As C1CollectionView(Of Customer) =
            New C1CollectionView(Of Customer)(Customer.GetCustomerList(100))
    gridview.DataSource = New C1CollectionViewBindingList(cv)
    
    C1CollectionView<Customer> cv = new C1CollectionView<Customer>(Customer.GetCustomerList(100));
    gridview.DataSource = new C1CollectionViewBindingList(cv);
    

Run the application and observe that the grid displays a Customers table.

Back to Top