Я пишу метод, который изменяет размеры столбцов в сетке данных так, чтобы все данные были видны, и столбцы полностью заполняли сетку данных.Что я делаю:
1) Установите DataGridViewAutoSizeColumnsMode в AllCells.Это покажет все данные в ячейках.
2) Рассчитайте расстояние в пикселях между правым краем последнего столбца и правым краем вида сетки данных.
3) Разделите это расстояние на количество столбцов.Это дает мне ширину, которая должна быть добавлена к каждому столбцу для полного заполнения таблицы данных.
4) Добавьте ширину от (3) к каждому столбцу.
Теоретически, это отобразит вседанные в столбцах и полностью заполняют сетку данных.
Если для DataGridViewAutoSizeColumnsMode
установлено значение fill
, все ширины столбцов равны.Однако не все мои данные имеют одинаковую ширину.Так что с ColumnsMode
, установленным для заполнения, у меня есть данные, бегущие по краям в некоторых ячейках, и куча пробелов в других ячейках.Но установите AllCells
, и я получаю большой разрыв между самым правым столбцом и правым краем сетки данных.
В связи с проблемой: я не могу установить свойство ширины столбца.Я понимаю, что не рассматривал случай, когда общая ширина столбца превышает ширину таблицы данных.
private void autoSizeDGV(DataGridView dgv)
{
try
{
//Step 1
dgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
//Step 2
int totalcellwidth = 0;
for (int i = 0; i < dgv.ColumnCount; i++)
{
totalcellwidth += dgv.Columns[i].Width;
}
//Step 3
int widthtoadd = (dgv.Width - totalcellwidth)/dgv.ColumnCount;
//Step 4
for (int i = 0; i < dgv.ColumnCount; i++)
{
Debug.WriteLine("previous dgv.Columns[" +i+ "]: " + dgv.Columns[i].Width);
dgv.Columns[i].Width += widthtoadd;
Debug.WriteLine("after dgv.Columns[" + i + "]: " + dgv.Columns[i].Width);
}
}