C# DataGridView 代码New,代码设置属性

在代码中New一个表格对象,控件显示的样式往往不会是我们想要的;在设置datagridview1对象的属性时,我们可以这样:
DataGridView dgv1 = new DataGridView();
dgv1.DataSource = dt;//DataTable或其他数据源
dgv1.DataBindingComplete += DataGridView1_DataBindingComplete;

//为什么不直接调用SetDataGridView_Properties(dgv1)对属性进行设置么呢?
//因为代码绑定数据源时,DataSource还没有实现对dgv1的View的渲染,此时dgv1的各种属性往往和没有绑定数据 //源没有什么区别,包括dgv1.Columns.Count 仍然是 0,此时是无法实现对dgv1的View进行各种设置的
//

DataGridView1_DataBindingComplete实现:

     private  void DataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
    {
        if (!(sender is DataGridView))
            return;
        SetDataGridView_Properties((DataGridView)sender);
    }

    public  void SetDataGridView_Properties(DataGridView dataGridView1)
    {
        if (dataGridView1 == null || dataGridView1.Columns.Count == 0)
            return;
        //自适应宽度
        int width = 0;
        for (int i = 0; i < dataGridView1.Columns.Count; i++)
        {
            //将每一列都调整为自动适应模式
            dataGridView1.AutoResizeColumn(i, DataGridViewAutoSizeColumnMode.AllCells);
            //记录整个DataGridView的宽度
            width += dataGridView1.Columns[i].Width;

            dataGridView1.Columns[i].SortMode = DataGridViewColumnSortMode.NotSortable;
            dataGridView1.Columns[i].ReadOnly = true;
        }
        //判断调整后的宽度与原来设定的宽度的关系,如果是调整后的宽度大于原来设定的宽度,
        //则将DataGridView的列自动调整模式设置为显示的列即可,
        //如果是小于原来设定的宽度,将模式改为填充。
        if (width > dataGridView1.Size.Width)
        {
            dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells;
        }
        else
        {
            ////冻结某列 从左开始 0,1,2
            dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
        }
        ////冻结某列 从左开始 0,1,2
        // ((DataGridView)dataGridView1).Columns[((DataGridView)dataGridView1).ColumnCount - 1].Frozen = true;
        ((DataGridView)dataGridView1).Columns[2].Frozen = true;

        dataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing;
        dataGridView1.ColumnHeadersHeight = 30;
        dataGridView1.RowHeadersWidth = 30;

        for (int i = 0; i < dataGridView1.Rows.Count; i++)
        {
            dataGridView1.Rows[i].Height = 28;
        }
        //标题居中
        dataGridView1.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft;

        dataGridView1.ForeColor = Color.Black;
        dataGridView1.BackgroundColor = Color.White;
        dataGridView1.AllowUserToAddRows = false;

        //dataGridView1.Refresh();
    }

    其他属性:
            dgv1.ReadOnly = true;                   

猜你喜欢

转载自blog.51cto.com/10555486/2588467