Пример #1
0
        /// <summary>
        /// 列表选择值变化
        /// </summary>
        private void lbColumns_SelectedValueChanged(object sender, EventArgs e)
        {
            pgrdColumns.SelectedObject = ((ListBox)sender).SelectedValue;
            btnMoveUp.Enabled          = lbColumns.SelectedIndex != 0;
            btnMoveDown.Enabled        = lbColumns.SelectedIndex != lbColumns.Items.Count - 1;

            if (pgrdColumns.SelectedObject == null)
            {
                return;
            }

            Object obj = ((ListBox)sender).SelectedValue;
            DetailGridViewTextBoxColumn column = (DetailGridViewTextBoxColumn)obj;
            bool readOnly = column.AdvanceProperty != (ComboBoxSourceHelper.AdvanceProperty)Enum.Parse(typeof(ComboBoxSourceHelper.AdvanceProperty), "1");
            //固定单元格时显示内容选项
            PropertyDescriptorCollection props = TypeDescriptor.GetProperties(obj);

            foreach (PropertyDescriptor pd in props)
            {
                if (pd.Name == "SerialStep")
                {
                    SetPropertyReadOnly(obj, pd.Name, readOnly);
                }
            }
            pgrdColumns.SelectedObject = obj;
        }
Пример #2
0
        /// <summary>
        /// 删除列
        /// </summary>
        private void btnDeleteColumn_Click(object sender, EventArgs e)
        {
            if (lbColumns.SelectedValue != null)
            {
                //得到当前选中项的索引
                int currIndex = lbColumns.SelectedIndex;
                try
                {
                    DetailGridViewTextBoxColumn col = (DetailGridViewTextBoxColumn)lbColumns.SelectedValue;
                    dicColumns.Remove(col.ColumnName);

                    if (dicColumns.Count == 0)
                    {
                        lbColumns.DataSource = null;
                        InitVariable(true);
                    }
                    else
                    {
                        lbColumns.DataSource = new BindingSource(dicColumns, null);
                    }
                    //删除当前项之后,默认选择前一项
                    lbColumns.SelectedIndex = currIndex - 1;

                    //当选择删除的项为第一项,但其下面还有其他项时,默认选择删除后的第一项
                    if (currIndex == 0 && lbColumns.Items.Count > 0)
                    {
                        lbColumns.SelectedIndex = 0;
                    }
                }
                catch
                {
                }
            }
        }
Пример #3
0
        /// <summary>
        /// 方法说明:重置所有列宽
        /// 作      者:jason.tang
        /// 完成时间:2013-07-29
        /// </summary>
        private void ResizeColumnWidth()
        {
            DetailGridViewTextBoxColumn col = new DetailGridViewTextBoxColumn();
            Dictionary <string, DetailGridViewTextBoxColumn> dic = new Dictionary <string, DetailGridViewTextBoxColumn>();

            foreach (var key in dicColumns.Keys)
            {
                col = new DetailGridViewTextBoxColumn();
                col = dicColumns[key];
                //col.Name = dicColumns[key].Name;
                col.SerialNumber = dicColumns[key].SerialNumber;
                col.Rows         = dicColumns[key].Rows;
                col.Visible      = dicColumns[key].Visible;
                col.ColumnName   = dicColumns[key].ColumnName;
                col.HeaderText   = dicColumns[key].HeaderText;
                col.Width        = 5;
                dic.Add(key, col);
            }

            dicColumns.Clear();
            dicColumns              = dic;
            lbColumns.DataSource    = new BindingSource(dic, null);
            lbColumns.SelectedIndex = lbColumns.Items.Count - 1;
        }
Пример #4
0
        /// <summary>
        /// 方法说明:增加列
        /// 作    者:jason.tang
        /// 完成时间:2013-01-09
        /// </summary>
        private void AddColumn()
        {
            DetailGridViewTextBoxColumn col = new DetailGridViewTextBoxColumn();

            if (dicColumns == null)
            {
                dicColumns = new Dictionary <string, DetailGridViewTextBoxColumn>();
            }
            int totalWidth = GetColumnWidthCount();

            //当剩余的列宽不够时,返回
            if (_totalWidth - totalWidth <= 0)
            {
                DialogResult result = MessageBox.Show("列宽已经达到明细框的最大宽度了,是否需要重新分配?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
                if (result == System.Windows.Forms.DialogResult.No)
                {
                    return;
                }

                pgrdColumns.SelectedObject = null;
                ResizeColumnWidth();
            }

            int    number   = lbColumns.Items.Count + 1;
            string key      = string.Format("Column{0}", number);
            int    colIndex = number;

            while (dicColumns.ContainsKey(key))
            {
                colIndex++;
                key = string.Format("Column{0}", colIndex);
            }
            col.ColumnName   = string.Format("Column{0}", colIndex);
            col.SerialNumber = number;

            col.Rows = "1";
            //col.SpaceRows = "0";
            if (number > 1)
            {
                int index = number - 1;
                key = string.Format("Column{0}", index);
                while (!dicColumns.ContainsKey(key))
                {
                    index--;
                    key = string.Format("Column{0}", index);

                    if (index < 0)
                    {
                        return;
                    }
                }

                col.Rows = dicColumns[string.Format("Column{0}", index)].Rows;
                //col.SpaceRows = dicColumns[string.Format("Column{0}", number - 1)].SpaceRows;
            }

            col.Visible = true;
            //if (comboAdvanceProperty.SelectedIndex == 1 && !string.IsNullOrEmpty(txtStep.Text))
            //{
            //    int step = 0;
            //    bool isDigit = int.TryParse(txtStep.Text, out step);
            //    if (isDigit)
            //    {
            //        col.SerialNumber = step * number;
            //    }
            //}

            //if (!string.IsNullOrEmpty(col.SpaceRows))
            //{
            //    int step = 0;
            //    bool isDigit = int.TryParse(col.SpaceRows, out step);
            //    if (isDigit)
            //    {
            //        col.SerialNumber = step * number;
            //    }
            //}

            //col.ColumnName = col.Name;
            col.HeaderText = col.ColumnName;
            col.Width      = 5;
            dicColumns.Add(col.ColumnName, col);
            lbColumns.DataSource    = new BindingSource(dicColumns, null);
            lbColumns.SelectedIndex = lbColumns.Items.Count - 1;
        }
Пример #5
0
        private void pgrdColumns_PropertyValueChanged(object s, PropertyValueChangedEventArgs e)
        {
            object obj = pgrdColumns.SelectedObject;
            DetailGridViewTextBoxColumn column = (DetailGridViewTextBoxColumn)obj;
            int rows      = 0;
            int spaceRows = 0;

            if (!string.IsNullOrEmpty(column.Rows))
            {
                rows = int.Parse(column.Rows);
                if (rows <= 0)
                {
                    rows = 1;
                }
            }
            //if (!string.IsNullOrEmpty(column.SpaceRows))
            //{
            //    spaceRows = int.Parse(column.SpaceRows);
            //    if (spaceRows <= 0)
            //    {
            //        spaceRows = 0;
            //    }
            //}
            if (dicColumns == null)
            {
                return;
            }

            Dictionary <string, DetailGridViewTextBoxColumn> dicTemp = new Dictionary <string, DetailGridViewTextBoxColumn>();


            int width = 0;

            foreach (string key in dicColumns.Keys)
            {
                dicColumns[key].Rows = rows.ToString();
                //dicColumns[key].SpaceRows = spaceRows.ToString();
                width += dicColumns[key].Width;

                if (e.OldValue != null && e.OldValue.ToString() == key)
                {
                    dicTemp.Add(dicColumns[key].ColumnName, dicColumns[key]);
                }
                else
                {
                    dicTemp.Add(key, dicColumns[key]);
                }
            }

            if (e.ChangedItem.Label == "名称")
            {
                dicColumns           = dicTemp;
                lbColumns.DataSource = new BindingSource(dicColumns, null);
            }

            if (width > _totalWidth)
            {
                int  oldValue = 0;
                bool isDigit  = int.TryParse(e.OldValue.ToString(), out oldValue);
                if (isDigit)
                {
                    column.Width = oldValue;
                }
            }

            if (column != null)
            {
                bool readOnly = column.AdvanceProperty != (ComboBoxSourceHelper.AdvanceProperty)Enum.Parse(typeof(ComboBoxSourceHelper.AdvanceProperty), "1");
                //固定单元格时显示内容选项
                PropertyDescriptorCollection props = TypeDescriptor.GetProperties(obj);
                foreach (PropertyDescriptor pd in props)
                {
                    if (pd.Name == "SerialStep")
                    {
                        SetPropertyReadOnly(obj, pd.Name, readOnly);
                    }
                }
                pgrdColumns.SelectedObject = obj;
            }
        }
Пример #6
0
        /// <summary>
        /// 确认
        /// </summary>
        private void btnConfirm_Click(object sender, EventArgs e)
        {
            this.DialogResult = System.Windows.Forms.DialogResult.OK;

            if (dicColumns.Count == 0)
            {
                _dicDetailColumns = null;
            }
            else
            {
                _dicDetailColumns = new List <DetailGridViewTextBoxColumn>();
            }

            DetailGridViewTextBoxColumn col = new DetailGridViewTextBoxColumn();
            int range = 1;
            //当前要改变宽度的Key
            string currKey = string.Empty;
            //已经存在的不为5的宽度
            int greaterWidth = 0;
            //为5的宽度个数
            List <string> lstFiveWidth = new List <string>();

            foreach (string key in dicColumns.Keys)
            {
                if (range == dicColumns.Keys.Count)
                {
                    currKey = key;
                }
                range++;

                if (dicColumns[key].Width > 5)
                {
                    greaterWidth += dicColumns[key].Width;
                }
                else
                {
                    lstFiveWidth.Add(key);
                }
            }

            if (lstFiveWidth.Count > 0)
            {
                int avgWidht  = (_totalWidth - greaterWidth) / lstFiveWidth.Count;
                int remainder = (_totalWidth - greaterWidth) % lstFiveWidth.Count;

                range = 0;
                foreach (string str in lstFiveWidth)
                {
                    if (range == lstFiveWidth.Count - 1)
                    {
                        dicColumns[str].Width = avgWidht + remainder;
                    }
                    dicColumns[str].Width = avgWidht;
                    range++;
                }
            }

            int allColWidth = GetColumnWidthCount();
            int diff        = _totalWidth - allColWidth;
            int avg         = 0;
            int rem         = 0;

            if (diff > 0 && dicColumns.Count > 0)
            {
                avg = diff / dicColumns.Count;
                rem = diff % dicColumns.Count;
            }

            int rang = 0;

            foreach (string key in dicColumns.Keys)
            {
                col = new DetailGridViewTextBoxColumn();
                col = dicColumns[key];
                //col.Name = dicColumns[key].Name;
                col.SerialNumber = dicColumns[key].SerialNumber;
                col.Rows         = dicColumns[key].Rows;
                col.Visible      = dicColumns[key].Visible;
                col.ColumnName   = dicColumns[key].ColumnName;
                col.HeaderText   = dicColumns[key].HeaderText;
                if (rang == dicColumns.Count - 1)
                {
                    col.Width = dicColumns[key].Width + avg + rem;
                }
                else
                {
                    col.Width = dicColumns[key].Width + avg;
                }

                _dicDetailColumns.Add(col);
                rang++;
            }

            this.Close();
        }
Пример #7
0
        /// <summary>
        /// 方法说明:增加明细框Grid
        /// 作者:jason.tang
        /// 完成时间:2013-02-05
        /// </summary>
        /// <param name="top">上边距</param>
        /// <param name="left">下边距</param>
        /// <param name="objColumns">明细列集合</param>
        /// <param name="cellEx">单元格</param>
        private void AddDetailGridView(int top, int left, object objColumns, DataGridViewTextBoxCellEx cellEx, DataGridView datagridview, List <DetailGridViewTextBoxColumn> _dicColumns)
        {
            DataGridView dgv = new DataGridView();

            dgv.Name = string.Format("dgv{0}&{1}&{2}@{3}", cellEx.RowIndex, cellEx.ColumnIndex,
                                     Guid.NewGuid().ToString(), pageCount);
            dgv.BackgroundColor = Color.White;

            #region 明细框位置设定

            dgv.Top  = top;
            dgv.Left = left;

            //dgv.Name = string.Format("dgv{0}-{1}", cellEx.RowIndex.ToString(), cellEx.ColumnIndex.ToString());

            List <DetailGridViewTextBoxColumn> listColumns = new List <DetailGridViewTextBoxColumn>();
            if (objColumns != null)
            {
                DetailGridViewTextBoxColumn textBoxColumn;
                DetailCell[] detailCells = new DetailCell[] { };
                string       type        = objColumns.GetType().ToString();
                if (objColumns.GetType() == detailCells.GetType())
                {
                    detailCells = objColumns as DetailCell[];
                    foreach (DetailCell cell in detailCells)
                    {
                        textBoxColumn                    = new DetailGridViewTextBoxColumn();
                        textBoxColumn.Width              = cell.ColumnWidth;
                        textBoxColumn.Content            = cell.Content;
                        textBoxColumn.DetailSplitLine    = cell.DetailLine;
                        textBoxColumn.HeaderText         = cell.HeaderText;
                        textBoxColumn.Lans               = cell.Lans;
                        textBoxColumn.Length             = cell.Length;
                        textBoxColumn.ColumnName         = cell.Name;
                        textBoxColumn.PerProcessRow      = cell.PerProcessRow;
                        textBoxColumn.SplitLineInProcess = cell.ProcessDetailLine;
                        textBoxColumn.Rows               = cell.Rows.ToString();
                        textBoxColumn.SerialNumber       = cell.SerialNumber;
                        textBoxColumn.Source             = cell.Source;
                        textBoxColumn.SpaceRows          = cell.SpaceRows.ToString();
                        textBoxColumn.Tag                = cell.Tag;
                        textBoxColumn.Type               = string.IsNullOrEmpty(cell.Type) ? (ComboBoxSourceHelper.CellStyle)Enum.Parse(typeof(ComboBoxSourceHelper.CellStyle), "0") :
                                                           (ComboBoxSourceHelper.CellStyle)Enum.Parse(typeof(ComboBoxSourceHelper.CellStyle), cell.Type);
                        textBoxColumn.Visible         = cell.AdvanceProperty != ((ComboBoxSourceHelper.AdvanceProperty)Enum.Parse(typeof(ComboBoxSourceHelper.AdvanceProperty), "3")).ToString();
                        textBoxColumn.AdvanceProperty = !string.IsNullOrEmpty(cell.AdvanceProperty) ? (ComboBoxSourceHelper.AdvanceProperty)Enum.Parse(typeof(ComboBoxSourceHelper.AdvanceProperty), cell.AdvanceProperty) :
                                                        (ComboBoxSourceHelper.AdvanceProperty)Enum.Parse(typeof(ComboBoxSourceHelper.AdvanceProperty), "0");
                        textBoxColumn.SerialStep  = cell.SerialStep;
                        textBoxColumn.ColumnValue = cell.ColumnValue;

                        listColumns.Add(textBoxColumn);

                        if (_dicColumns != null && !_dicColumns.Contains(textBoxColumn))
                        {
                            _dicColumns.Add(textBoxColumn);
                        }
                    }
                }
            }

            dgv.Width  = datagridview.Columns[cellEx.ColumnIndex].Width;
            dgv.Height = datagridview.Rows[cellEx.RowIndex].Height;

            #endregion

            #region 明细框:处理合并的单元格

            int colspan = cellEx.ColumnSpan;
            int rowspan = cellEx.RowSpan;

            if (colspan > 1)
            {
                for (int i = 1; i < colspan; i++)
                {
                    dgv.Width += datagridview.Columns[cellEx.ColumnIndex + i].Width;
                }
            }
            if (rowspan > 1)
            {
                for (int i = 1; i < rowspan; i++)
                {
                    dgv.Height += datagridview.Rows[cellEx.RowIndex + i].Height;
                }
            }

            #endregion

            #region 明细框列表属性配置

            dgv.RowHeadersVisible = false;
            dgv.BorderStyle       = BorderStyle.None;
            //dgv.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
            dgv.ReadOnly                    = true;
            dgv.ScrollBars                  = ScrollBars.None;
            dgv.BorderStyle                 = BorderStyle.None;
            dgv.AllowUserToAddRows          = false;
            dgv.AllowUserToResizeColumns    = false;
            dgv.AllowUserToResizeRows       = false;
            dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing;
            //dgv.EditMode = DataGridViewEditMode.EditOnEnter;
            if (listColumns.Count > 0)
            {
                dgv.Rows.Clear();
                dgv.Columns.Clear();
                dgv.DefaultCellStyle.SelectionBackColor = Color.WhiteSmoke;
                dgv.DefaultCellStyle.SelectionForeColor = Color.Black;
                int    totalWidth = 0;
                int    totalRows  = 1;
                string tag        = string.Empty;
                foreach (DetailGridViewTextBoxColumn column in listColumns)
                {
                    dgv.Columns.Add(column);
                    totalWidth += column.Width;
                }

                if (totalWidth < dgv.Width)
                {
                    dgv.Columns[dgv.Columns.Count - 1].Width += dgv.Width - totalWidth;
                }

                if (listColumns != null && listColumns.Count > 0)
                {
                    DetailGridViewTextBoxColumn columns = (DetailGridViewTextBoxColumn)listColumns[0];
                    totalRows = int.Parse(columns.Rows);
                    for (int i = 0; i < totalRows; i++)
                    {
                        dgv.Rows.Insert(i, 1);
                    }
                }

                int rowHeight = dgv.Height - 23;
                //总宽度不足,补充到最后一列
                for (int i = 0; i < totalRows; i++)
                {
                    dgv.Rows[i].Height = rowHeight / totalRows;
                    if (i == totalRows - 1)
                    {
                        dgv.Rows[i].Height = rowHeight / totalRows + rowHeight % totalRows;
                    }
                }
            }

            int colRange = 0;
            foreach (DetailGridViewTextBoxColumn column in listColumns)
            {
                string columnValue = ((DetailGridViewTextBoxColumn)column).ColumnValue;
                if (!string.IsNullOrEmpty(columnValue) && string.IsNullOrEmpty(column.Source))
                {
                    string[] strValues = columnValue.Split(new char[] { ',' });
                    int      rowRange  = 0;
                    foreach (DataGridViewRow row in dgv.Rows)
                    {
                        row.Cells[colRange].Value = strValues[rowRange];
                        rowRange++;
                    }
                }//来源不为空,则自动带出来源数据
                else if (!string.IsNullOrEmpty(column.Source) && ModuleObject != null)
                {
                    foreach (PropertyInfo pi in ModuleObject.GetType().GetProperties())
                    {
                        if (pi.Name.ToLower() == column.Source.ToLower() && pi.GetValue(ModuleObject, new object[] { }) != null)
                        {
                            columnValue = pi.GetValue(ModuleObject, new object[] { }).ToString();
                            break;
                        }
                    }
                    int rowRange = 0;
                    foreach (DataGridViewRow row in dgv.Rows)
                    {
                        row.Cells[colRange].Value = columnValue;
                        rowRange++;
                    }
                }

                colRange++;
            }

            //dgv.CellClick += dgv_CellClick;
            //dgv.CellDoubleClick += DataGridView_CellDoubleClick;
            //dgv.CellMouseDown += DataGridView_CellMouseDown;
            //dgv.EditingControlShowing += dgv_EditingControlShowing;
            //dgv.KeyDown += dgv_KeyDown;
            //dgv.CellBeginEdit += dgv_CellBeginEdit;

            //dgvTemp = dgv;
            SetSerialNumberColumn(dgv);
            datagridview.Controls.Add(dgv);

            #endregion
        }
Пример #8
0
        /// <summary>
        /// 方法说明:设定明细框列
        /// 作   者:jason.tang
        /// 完成时间:2013-01-05
        /// <param name="listColumns">明细列集合</param>
        /// <param name="gridName">明细Grid名称</param>
        private void SetDataGridViewColumns(List <DetailGridViewTextBoxColumn> listColumns, string gridName, DataGridView datagridview)
        {
            Control[] controls = datagridview.Controls.Find(gridName, false);

            if (controls.Length == 0 || listColumns == null)
            {
                return;
            }

            DataGridView dgv = (DataGridView)controls[0];

            dgv.Rows.Clear();
            dgv.Columns.Clear();
            int    totalWidth = 0;
            int    totalRows  = 1;
            string tag        = string.Empty;

            foreach (DetailGridViewTextBoxColumn column in listColumns)
            {
                //if (column.Tag != null && !string.IsNullOrEmpty(column.Tag.ToString()))
                //{
                //    tag = column.Tag.ToString();
                //}
                column.Visible = column.AdvanceProperty != ((ComboBoxSourceHelper.AdvanceProperty)Enum.Parse(typeof(ComboBoxSourceHelper.AdvanceProperty), "3"));
                dgv.Columns.Add(column);
                totalWidth += column.Width;
            }

            if (totalWidth < dgv.Width)
            {
                dgv.Columns[dgv.Columns.Count - 1].Width += dgv.Width - totalWidth;
            }
            ////明细列扩展属性Tag
            //if (!string.IsNullOrEmpty(tag))
            //{
            //    string[] tags = tag.Split(new char[] { ',' });
            //    totalRows = int.Parse(tags[4]);
            //    for (int i = 1; i < totalRows; i++)
            //    {
            //        dgv.Rows.Add();
            //    }
            //}
            if (listColumns != null && listColumns.Count > 0)
            {
                DetailGridViewTextBoxColumn columns = (DetailGridViewTextBoxColumn)listColumns[0];
                totalRows = int.Parse(columns.Rows);
                for (int i = 1; i < totalRows; i++)
                {
                    dgv.Rows.Add();
                }
            }

            //总宽度不足,补充到最后一列
            int totalHeight = dgv.Height - 20;

            for (int i = 0; i < totalRows; i++)
            {
                dgv.Rows[i].Height = totalHeight / totalRows;
                if (i == totalRows - 1)
                {
                    dgv.Rows[i].Height = totalHeight / totalRows + totalHeight % totalRows;
                }
                //dgv.Rows[i].DefaultCellStyle.SelectionBackColor = Color.FromArgb(215, 228, 242);
            }
        }
Пример #9
0
        /// <summary>
        /// 方法说明:增加明细框Grid
        /// 作者:jason.tang
        /// 完成时间:2012-12-22
        /// </summary>
        /// <param name="top">上边距</param>
        /// <param name="left">下边距</param>
        /// <param name="objColumns">明细列集合</param>
        private void AddDetailGridView(int top, int left, object objColumns, List <DetailGridViewTextBoxColumn> _dicColumns, DataGridView datagridview, DataGridViewTextBoxCellEx cellEx)
        {
            DataGridView dgv = new DataGridView();

            dgv.BackgroundColor = Color.White;

            #region 明细框位置设定

            dgv.Top  = top;
            dgv.Left = left;

            CheckIsInSpanCells(dgv, datagridview, cellEx);

            dgv.Name = string.Format("dgv{0}-{1}", cellEx.RowIndex.ToString(), cellEx.ColumnIndex.ToString());

            List <DetailGridViewTextBoxColumn> listColumns = new List <DetailGridViewTextBoxColumn>();
            if (objColumns != null)
            {
                List <DetailGridViewTextBoxColumn> dicColumns = objColumns as List <DetailGridViewTextBoxColumn>;
                DetailGridViewTextBoxColumn        textBoxColumn;
                DetailCell[] detailCells = new DetailCell[] { };
                string       type        = objColumns.GetType().ToString();
                if (objColumns.GetType() == detailCells.GetType())
                {
                    detailCells = objColumns as DetailCell[];
                    foreach (DetailCell cell in detailCells)
                    {
                        textBoxColumn                    = new DetailGridViewTextBoxColumn();
                        textBoxColumn.Width              = cell.ColumnWidth;
                        textBoxColumn.Content            = cell.Content;
                        textBoxColumn.DetailSplitLine    = cell.DetailLine;
                        textBoxColumn.HeaderText         = cell.HeaderText;
                        textBoxColumn.Lans               = cell.Lans;
                        textBoxColumn.Length             = cell.Length;
                        textBoxColumn.ColumnName         = cell.Name;
                        textBoxColumn.PerProcessRow      = cell.PerProcessRow;
                        textBoxColumn.SplitLineInProcess = cell.ProcessDetailLine;
                        textBoxColumn.Rows               = cell.Rows.ToString();
                        textBoxColumn.SerialNumber       = cell.SerialNumber;
                        textBoxColumn.Source             = cell.Source;
                        textBoxColumn.SpaceRows          = cellEx.SpaceRows.ToString(); //cell.SpaceRows.ToString();
                        textBoxColumn.Tag                = cell.Tag;
                        textBoxColumn.Type               = string.IsNullOrEmpty(cell.Type) ? (ComboBoxSourceHelper.CellStyle)Enum.Parse(typeof(ComboBoxSourceHelper.CellStyle), "0") :
                                                           (ComboBoxSourceHelper.CellStyle)Enum.Parse(typeof(ComboBoxSourceHelper.CellStyle), cell.Type);
                        textBoxColumn.Visible         = cell.AdvanceProperty != ((ComboBoxSourceHelper.AdvanceProperty)Enum.Parse(typeof(ComboBoxSourceHelper.AdvanceProperty), "3")).ToString();
                        textBoxColumn.AdvanceProperty = !string.IsNullOrEmpty(cell.AdvanceProperty) ? (ComboBoxSourceHelper.AdvanceProperty)Enum.Parse(typeof(ComboBoxSourceHelper.AdvanceProperty), cell.AdvanceProperty) :
                                                        (ComboBoxSourceHelper.AdvanceProperty)Enum.Parse(typeof(ComboBoxSourceHelper.AdvanceProperty), "0");
                        textBoxColumn.SerialStep = cellEx.SerialStep; //cell.SerialStep;
                        listColumns.Add(textBoxColumn);
                        if (_dicColumns != null && !_dicColumns.Contains(textBoxColumn))
                        {
                            _dicColumns.Add(textBoxColumn);
                        }
                    }
                }
                else if (dicColumns != null)
                {
                    foreach (DetailGridViewTextBoxColumn col in dicColumns)
                    {
                        col.SerialStep = cellEx.SerialStep;
                        col.SpaceRows  = cellEx.SpaceRows.ToString();
                        listColumns.Add(col);
                    }
                }
            }

            if (datagridview.Controls.ContainsKey(dgv.Name) && objColumns != null)
            {
                SetDataGridViewColumns(listColumns, dgv.Name, datagridview);
                return;
            }

            dgv.Width  = datagridview.Columns[datagridview.CurrentCell.ColumnIndex].Width;
            dgv.Height = datagridview.Rows[datagridview.CurrentCell.RowIndex].Height;

            #endregion

            #region 明细框:处理合并的单元格

            int colspan = (datagridview.CurrentCell as DataGridViewTextBoxCellEx).ColumnSpan;
            int rowspan = (datagridview.CurrentCell as DataGridViewTextBoxCellEx).RowSpan;

            if (colspan > 1)
            {
                for (int i = 1; i < colspan; i++)
                {
                    dgv.Width += datagridview.Columns[datagridview.CurrentCell.ColumnIndex + i].Width;
                }
            }
            if (rowspan > 1)
            {
                for (int i = 1; i < rowspan; i++)
                {
                    dgv.Height += datagridview.Rows[datagridview.CurrentCell.RowIndex + i].Height;
                }
            }

            #endregion

            #region 明细框列表属性配置

            Control[] controls = datagridview.Controls.Find(dgv.Name, false);
            if (controls.Length > 0)
            {
                dgv = (DataGridView)controls[0];
                dgv.Rows.Clear();
                dgv.Columns.Clear();
            }


            dgv.Columns.Add("", "");
            dgv.Columns.Add("", "");
            //dgv.ColumnHeadersVisible = false;
            dgv.Rows[0].Height   = dgv.Height;
            dgv.Columns[0].Width = 25;
            dgv.Columns[1].Width = dgv.Width - 25;
            dgv.DefaultCellStyle.SelectionBackColor = Color.WhiteSmoke;
            dgv.BorderStyle = BorderStyle.None;
            //dgv.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
            dgv.RowHeadersVisible           = false;
            dgv.ReadOnly                    = true;
            dgv.ScrollBars                  = ScrollBars.None;
            dgv.AutoGenerateColumns         = false;
            dgv.AllowUserToResizeColumns    = true;
            dgv.AllowUserToResizeRows       = false;
            dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing;
            //dgv.RowHeightChanged += dgv_RowHeightChanged;
            datagridview.Controls.Add(dgv);
            if (listColumns.Count > 0)
            {
                SetDataGridViewColumns(listColumns, dgv.Name, datagridview);
            }

            #endregion
        }