Esempio n. 1
0
        /// <summary>
        /// 使列宽等于该列最长单元格长,可设置列显示或隐藏
        /// </summary>
        /// <param name="dg"></param>
        /// <param name="Len">为0表示显示,为1表示隐藏</param>
        public static void SetStyle(DataGrid dg, params int[] Len)
        {
            if (dg.DataSource == null)
            {
                return;
            }

            DataTable dt;

            switch (dg.DataSource.GetType().ToString())
            {
            case "System.Data.DataSet":
                dt = ((DataSet)dg.DataSource).Tables[dg.DataMember];
                break;

            case "System.Data.DataView":
                dt = ((DataView)dg.DataSource).Table;
                break;

            case "System.Data.DataTable":
                dt = (DataTable)dg.DataSource;
                break;

            default:
                dt = (DataTable)dg.DataSource;
                break;
            }

            DataGridTableStyle style = new DataGridTableStyle();

            style.MappingName          = dg.DataSource.ToString();
            style.AlternatingBackColor = System.Drawing.Color.FromArgb(((System.Byte)(192)), ((System.Byte)(192)), ((System.Byte)(255)));
            style.BackColor            = System.Drawing.SystemColors.Info;
            style.GridLineColor        = System.Drawing.SystemColors.HotTrack;
            style.SelectionBackColor   = Color.Red;

            ColumnInfo[] mColumnInfo = new ColumnInfo[dt.Columns.Count];
            for (int i = 0; i < dt.Columns.Count; i++)
            {
                ColumnInfo ci = new ColumnInfo();
                ci.Name     = dt.Columns[i].ColumnName;
                ci.DataType = dt.Columns[i].DataType.ToString();
                ci.CompareStringLength(ci.Name);
                mColumnInfo[i] = ci;
            }
            foreach (DataRow dr in dt.Rows)
            {
                for (int i = 0; i < dt.Columns.Count; i++)
                {
                    if (!dr.IsNull(i))
                    {
                        mColumnInfo[i].CompareStringLength(dr[i].ToString());
                    }
                }
            }

            DataGridColumnStyle col;

            for (int i = 0; i < dt.Columns.Count; i++)
            {
                if (dt.Columns[i].DataType.FullName == "System.Boolean")
                {
                    col = new DataGridBoolColumn();
                }
                else
                {
                    col = new DataGridTextBoxColumn();
                }
                col.MappingName = mColumnInfo[i].Name;
                col.HeaderText  = mColumnInfo[i].Name;
                col.Width       = (int)mColumnInfo[i].Width(dg, Len[i]);
                col.Alignment   = HorizontalAlignment.Left;
                col.NullText    = string.Empty;
                style.GridColumnStyles.Add(col);
            }

            dg.TableStyles.Clear();
            dg.TableStyles.Add(style);
            dg.ReadOnly        = true;
            dg.BackgroundColor = Color.White;
            dg.AllowSorting    = true;
        }