在代码中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;