private void UpdateColumn(int col)
        {
            SpreadsheetColumn column = grid.Columns[col] as SpreadsheetColumn;

            column.Binding = new Binding("[" + col + "]");
            if (data.columnDatas[col].HasCustomLabel())
            {
                column.Header = data.columnDatas[col].label;
            }
            else
            {
                column.Header = "";
                column.Header = GetColumnName(col);
            }
            column.IsReadOnly = data.columnDatas[col].HasExpression();
        }
        public void AddColumn(int?col)
        {
            int colIndex             = (col.HasValue ? col.Value : (grid.Columns.Count));
            SpreadsheetColumn column = new SpreadsheetColumn()
            {
                Binding     = new Binding("[" + colIndex + "]"),
                Header      = GetColumnName(colIndex),
                HeaderStyle = (Style)this.Resources["HeaderStyle"]
            };

            grid.Columns.Insert(colIndex, column);
            // update the columns binding and header
            for (int i = colIndex + 1; i < grid.Columns.Count; ++i)
            {
                UpdateColumn(i);
            }
            //grid.Items.Refresh();
        }