Я делаю что-то похожее, но с форматированием.
Проблема в том, что сетка не рисуется после настройки источника данных - вам нужно внести изменения в событие DataBindingComplete
.
Вот некоторые фрагменты ....
(из https://minisqlquery.svn.codeplex.com/svn/trunk/MiniSqlQuery/QueryForm.cs)
- сетка по умолчанию:
this.gridResults1.AllowUserToAddRows = false;
this.gridResults1.AllowUserToDeleteRows = false;
this.gridResults1.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.ColumnHeader;
this.gridResults1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
this.gridResults1.Dock = System.Windows.Forms.DockStyle.Fill;
this.gridResults1.Location = new System.Drawing.Point(3, 3);
this.gridResults1.Name = "gridResults1";
this.gridResults1.ReadOnly = true;
this.gridResults1.Size = new System.Drawing.Size(1023, 242);
this.gridResults1.TabIndex = 0;
- позже подпишитесь на DataBindingComplete
событие:
grid.DataBindingComplete += GridDataBindingComplete;
- обработать событие (здесь я изменяю формат, но вы пытаетесь изменить ширину):
private void GridDataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
DataGridView grid = sender as DataGridView;
if (grid == null)
{
return;
}
DataTable dt = grid.DataSource as DataTable;
if (dt == null)
{
return;
}
string nullText = _settings.NullText;
string dateTimeFormat = _settings.DateTimeFormat;
for (int i = 0; i < dt.Columns.Count; i++)
{
if (dt.Columns[i].DataType == typeof (DateTime))
{
DataGridViewCellStyle dateCellStyle = new DataGridViewCellStyle();
dateCellStyle.NullValue = nullText;
dateCellStyle.Format = dateTimeFormat;
grid.Columns[i].DefaultCellStyle = dateCellStyle;
}
}
}