.NET VS2010 DataGridView Параметр AutoSizeColumnsMode запрещает изменение размера пользователя - PullRequest
2 голосов
/ 03 октября 2011

У меня странная проблема в программе, которую я разрабатываю для .NET 3.5 с использованием C # в Visual Studio 2010.

Я заполняю DataGridView информацией и хотел бы изменить размер столбцов сетки данных в соответствии с заголовками, но также разрешить пользователю вручную изменять размер столбцов, если данные длиннее, чем длина значения заголовка.

Поэтому я изменил свой DataGridView.AutoSizeColumnsMode = ColumnHeader. DataGridView теперь изменяет размеры столбцов автоматически в соответствии с заголовком, но внезапно обнаруживается, что я не могу изменить размер столбцов вручную с помощью мыши, даже если мое свойство DataGridView.AllowUserToResizeColumns имеет значение true.

У меня вопрос: как я могу автоматически изменять размеры столбцов представления таблицы данных, в то же время позволяя пользователю изменять размер столбцов?

Ответы [ 6 ]

3 голосов
/ 05 декабря 2012

Я ломал голову над той же проблемой (более или менее), и я не мог понять это.

Я убедился, что установлены следующие свойства

AllowUserToResizeColumns = True
AutoSizeColumnsMode = None

Затем в моем коде я установил следующее после заполнения сетки данными:

dataGridView1.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells)

ОП вместо этого будет использовать:

dataGridView1.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.ColumnHeader)

Это должно было быть сделано, поэтому вы автоматически изменяете размер столбцов один раз, но в противном случае AutoSizeColumnsMode устанавливается на None, поэтому у пользователя все еще есть контроль.

... Моя проблема заключалась в том, что я забыл, что сами столбцы имеют свойства, которые также необходимо учитывать. Я установил для большинства столбцов:

AutoSizeMode = AllCells

которая была источником моей проблемы ... поэтому я установил их на

AutoSizeMode = NotSet

и все так, как и должно быть.

2 голосов
/ 09 июля 2012

Способ, которым я это делаю, более прост:

Сначала заполните свою сетку требуемыми данными.Затем установите следующие свойства (вы также можете установить их в конструкторе)

datagridResult.DataSource = YourDataSourceHere
datagridResult.AllowUserToOrderColumns = true;
datagridResult.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells;

Теперь добавьте следующий код в обработчик событий «Показано» в форме:

 private void MainForm_Shown(object sender, EventArgs e)
    {
        Application.DoEvents();
        datagridResult.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.None;
    }

Вот и все:)

2 голосов
/ 03 октября 2011

Решение от здесь покрыто C # и протестировано:

for (int i = 0; i < dataGridView1.Columns.Count; i++)
{
   // Size the column header based on the ColumnHeader mode
   dataGridView1.Columns[i].AutoSizeMode = 
      DataGridViewAutoSizeColumnMode.ColumnHeader;
   // Store autosized width
   int colw = dataGridView1.Columns[i].HeaderCell.PreferredSize.Width;
   // Change back to Resize mode
   dataGridView1.Columns[i].AutoSizeMode = 
      DataGridViewAutoSizeColumnMode.None;
   // Set width to calculated above
   dataGridView1.Columns[i].Width = colw;
}

Только что найдено лучшее решение от MSDN.Перед отображением DataGridView используйте функцию AutoResizeColumn.Например:

void Form1_Load(object sender, EventArgs e)
{
   for (int i = 0; i < dataGridView1.Columns.Count; i++)
   {
      dataGridView1.AutoResizeColumn(
         i, DataGridViewAutoSizeColumnMode.ColumnHeader);
   }
}
1 голос
/ 03 октября 2011

Используйте решение отсюда:

Как автоматически изменять размер столбцов в элементе управления DataGridView И разрешать пользователю изменять размер столбцов в той же сетке

И вместо использования

 grd.Columns(0).AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells

Использование:

 grd.Columns(0).AutoSizeMode = DataGridViewAutoSizeColumnMode.ColumnHeader
0 голосов
/ 01 августа 2013

Код должен быть таким, надеюсь, это поможет

datagridView1.Columns[columnindex].AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
0 голосов
/ 03 октября 2011
detailsDataGridView.AutoSizeColumnsMode = 
        DataGridViewAutoSizeColumnsMode.AllCells doesn't work? 

Нашел здесь .

Если этого не произойдет, вы всегда можете обработать его вручную и просто изменить размер столбца всякий раз, когда данные ячейки изменяются, чтобы быть равными самой большой ячейке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...