FlexGrid for WinForms
FinancialDataList

        public class FinancialDataList :BindingList<FinancialData>
        {
        // フィールド
        Timer _timer;
        Random _rnd = new Random(0);

        // オブジェクト モデル
        public int UpdateInterval 
        { 
            get { return (int)_timer.Interval; }
            set { _timer.Interval = value; }
        }
        public int BatchSize { get; set; }
        public bool AutoUpdate
        {
            get { return _timer.Enabled; }
            set { _timer.Enabled = value; }
        }

        // ctor
        public FinancialDataList()
        {
            _timer = new Timer();
            _timer.Tick += _timer_Tick;
            UpdateInterval = 1000;
            BatchSize = 100;
        }

        //タイマーティックでデータを変更して、ライブの変更をシミュレートします。
        void _timer_Tick(object sender, EventArgs e)
        {
            if (this.Count > 0)
            {
                for (int i = 0; i < BatchSize; i++)
                {
                    int index = _rnd.Next() % this.Count;
                    var data = this[index];
                    data.Bid = (data.Bid == 0 ? 1: data.Bid) * (decimal)(1 + (_rnd.NextDouble() * .11 - .05));
                    data.Ask = (data.Ask == 0 ? 1 : data.Ask) * (decimal)(1 + (_rnd.NextDouble() * .11 - .05));
                    data.BidSize = _rnd.Next(10, 1000);
                    data.AskSize = _rnd.Next(10, 1000);
                    var sale = (data.Ask + data.Bid) / 2;
                    data.LastSale = sale;
                    data.LastSize = (data.AskSize + data.BidSize) / 2;
                    data.QuoteTime = DateTime.Now;
                    data.TradeTime = DateTime.Now.AddSeconds(-_rnd.Next(0, 60));
                }
            }
        }
    }