Вопрос:
У меня есть datagridview в winform и хотел бы сделать две вещи. Измените размер datagrid, чтобы все столбцы были показаны (без свитков) на основе размера datagrid, изменяя размер ширины winform.
-
попробовал код ниже, но он не работает *
int width = 0; foreach (DataGridViewColumn col in information.Columns) { width += col.Width; } width += information.RowHeadersWidth; information.ClientSize = new Size(width + 100,height);
Ответ №1
Простой порядок операций:
- Задайте свойство AutoSizeColumnMode DataGridView для AllCells.
- Добавьте свойство Width для всех столбцов плюс некоторый слабину для дополнительной ширины из границ элемента управления и т.д. (Возможно, плюс 2)
- Задайте свойство Width для DataGridView в соответствии с рассчитанной вами шириной.
- Установите ширину формы в ширину DataGridView.
До вас на самом деле код.
EDIT: Я сейчас перед компилятором, поэтому я поставил это вместе:
Перейдите в Visual Studio. Начните новый проект. Не ставьте ничего на форму в дизайнере. Просто используйте этот код в инициализаторе.
public Form1() { InitializeComponent(); // Create a DataGridView with 5 Columns // Each column is going to sized at 100 pixels wide which is default // Once filled, we will resize the form to fit the control DataGridView dataGridView1 = new DataGridView(); for (int i = 0; i < 5; i++) { DataGridViewTextBoxColumn col = new DataGridViewTextBoxColumn(); dataGridView1.Columns.Add(col); } dataGridView1.Location = new Point(0, 0); // Add the DataGridView to the form this.Controls.Add(dataGridView1); // Step 2: // Figure out the width of the DataGridView columns int width = 0; foreach (DataGridViewColumn col in dataGridView1.Columns) width += col.Width; width += dataGridView1.RowHeadersWidth; // Step 3: // Change the width of the DataGridView to match the column widths // I add 2 pixels to account for the control borders dataGridView1.Width = width + 2; // Step 4: // Now make the form width equal to the conbtrol width // I add 16 to account for the form boarders this.Width = dataGridView1.Width + 16; }
Этот код создает DataGridView с пятью столбцами, а затем размер элемента управления и форму точно так же, как вы просили. Я выполнил точные шаги, описанные выше (за исключением шага 1, потому что у меня нет данных в моих столбцах).
Этот код работает. Поэтому, если ваш не работает, должно быть что-то еще глупое, что вы продолжаете, и я не могу вам помочь.
Ответ №2
Здравствуйте, я узнал, как это сделать, используя следующий код ниже. информация – это дататус, и это форма.
int width = 0; this.information.RowHeadersVisible = false; for (int i = 0; i < information.Columns.Count; i++) width += information.Columns[i].GetPreferredWidth(DataGridViewAutoSizeColumnMode.AllCells, true); int rows = 0; this.information.RowHeadersVisible = false; for (int i = 0; i < information.Rows.Count; i++) rows += information.Rows[i].GetPreferredHeight(i, DataGridViewAutoSizeRowMode.AllCells, true); information.Size = new Size(width +20, rows+50); this.Width = width + 50;