ОК, время взломать:
Чтобы продемонстрировать, вот небольшое приложение:
public partial class Form1 : Form
{
DataTable table = new DataTable();
public Form1()
{
InitializeComponent();
this.dataGridView1.SelectionMode = DataGridViewSelectionMode.ColumnHeaderSelect;
this.dataGridView1.ColumnAdded += new DataGridViewColumnEventHandler(dataGridView1_ColumnAdded);
}
void dataGridView1_ColumnAdded(object sender, DataGridViewColumnEventArgs e)
{
Console.WriteLine("Column added");
e.Column.SortMode = DataGridViewColumnSortMode.NotSortable;
}
private void button1_Click(object sender, EventArgs e)
{
table.Columns.Add("Name");
table.Columns.Add("Age", typeof(int));
table.Rows.Add("John", 27);
this.FlipSelectionMode();
this.dataGridView1.DataSource = table;
this.FlipSelectionMode();
}
private void button2_Click(object sender, EventArgs e)
{
this.FlipSelectionMode();
table.Columns.Add("Height",typeof(int));
table.Rows[0]["Height"] = 60;
this.FlipSelectionMode();
}
private void FlipSelectionMode()
{
this.dataGridView1.SelectionMode = this.dataGridView1.SelectionMode == DataGridViewSelectionMode.ColumnHeaderSelect ? DataGridViewSelectionMode.CellSelect : DataGridViewSelectionMode.ColumnHeaderSelect;
}
}
По сути, сначала я установил режим выбора DataGridView в ColumnHeaderSelect. При нажатии кнопки 1 я добавляю материал в таблицу данных, а затем связываю его с DataGridView. Хитрость в том, что я вызываю метод с именем FlipSelectionMode () до и после привязки DGV. Что это делает, если он находится в режиме выбора заголовка столбца, он переворачивает его на выбор ячейки и наоборот. Это позволяет добавить столбец. Затем в событии добавления столбца я установил свойство сортировки столбцов на Programmatic, в противном случае вы не сможете добавить другой столбец. Чтобы продемонстрировать, что при нажатии кнопки 2 он просто добавляет еще один столбец, снова переключая режим выбора до и после.
Я согласен, это полный взлом, но DGV - фанк. У меня было много проблем, и мне почти всегда приходилось разбираться с вещами.