我有一個datagridview停靠和錨定與Winform面板。當我調整窗體大小時,datagridview按預期調整大小,但列不調整大小以適應datagridview。相反,我留下了Datagridview的背景顏色。c#調整datagridview列以適應控制
如何獲得與控件一起增長的列?
謝謝。
我有一個datagridview停靠和錨定與Winform面板。當我調整窗體大小時,datagridview按預期調整大小,但列不調整大小以適應datagridview。相反,我留下了Datagridview的背景顏色。c#調整datagridview列以適應控制
如何獲得與控件一起增長的列?
謝謝。
private void dataGrid_SizeChanged(object sender, EventArgs e)
{
ResizeGridColumns();
}
private void ResizeGridColumns()
{
//get sum of non-resizable columns width
int diffWidth = 0;
foreach (DataGridViewColumn col in this.dataGrid.Columns)
{
if (col.Resizable == DataGridViewTriState.False && col.Visible) diffWidth += col.Width;
}
//calculate available width
int totalResizableWith = this.dataGrid.Width - diffWidth;
//resize column width based on previous proportions
this.dataGrid.ColumnWidthChanged -= new DataGridViewColumnEventHandler(dataGrid_ColumnWidthChanged);
for (int i = 0; i < this.colWidthRaport.Count; i++)
{
try
{
if (this.dataGrid.Columns[i].Resizable != DataGridViewTriState.False && this.dataGrid.Columns[i].Visible)
{
this.dataGrid.Columns[i].Width = (int)Math.Floor((decimal)totalResizableWith/this.colWidthRaport[i]);
}
}
catch { }
}
this.dataGrid.ColumnWidthChanged += new DataGridViewColumnEventHandler(dataGrid_ColumnWidthChanged);
}
private void dataGrid_ColumnWidthChanged(object sender, DataGridViewColumnEventArgs e)
{
CalculateGridColWidthsRaport();
}
/// <summary>Calculates the proportions between grid width and column width</summary>
private void CalculateGridColWidthsRaport()
{
//get sum of non-resizable columns width
int diffWidth = 0;
int colWidthsSum = 0;
foreach (DataGridViewColumn col in this.dataGrid.Columns)
{
if (col.Visible)
{
colWidthsSum += col.Width;
if (col.Resizable == DataGridViewTriState.False) diffWidth += col.Width;
}
}
colWidthsSum += 24;
//calculate available with
int totalResizableWith = colWidthsSum - diffWidth;// this.dataGrid.Width - diffWidth;
if (this.ParentForm.WindowState == FormWindowState.Maximized)
{
totalResizableWith = this.dataGrid.Width - diffWidth;
}
//calculate proportions of each column relative to the available width
this.colWidthRaport = new List<decimal>();
foreach (DataGridViewColumn col in this.dataGrid.Columns)
{
this.colWidthRaport.Add((decimal)totalResizableWith/(decimal)col.Width);
}
}
您可以設置其中一列的AutoSizeMode
屬性爲Fill
。然後,此列將自行調整大小以填充其他列未使用的所有可用空間。
你總是可以使用AutoSizeColumnsMode
財產
這個屬性可以配置的控制,使列寬度自動調整以填補控制或者以適應單元格的內容。只要控件的寬度發生變化,大小調整就會在填充模式下進行。
MSDN頁面上有很多關於此的信息。
謝謝。我已經使用了事件,它工作正常。 – 2010-11-16 12:50:53