C# WinForm 擴展指定列寬適應DataGridView顯示行數

C# WinForm DataGridView用於顯示組織到的數據,在數據行記錄數不足Grid的屏顯示行數時,右側的垂直滾動條此時是無用的,是不需要顯示的,特別是對於某些(較真、執着,呵呵)人很是如此。前段時間就又碰到一例,問我有否解決辦法,說是每個Grid的各列寬都不同,調試比較麻煩,便弄了下面這些代碼來解決這個問題。

需要注意的是,一般情況下,Grid在設計時,都只會用到:列寬、列頭名、數據源屬性或列名、可視否等幾個基本屬性。而DataGridView有個列的MinimumWidth屬性用於記錄列最小寬度,這個屬性在涉及到列寬度變化時是很有用的。在設計Grid時,通常都是已經將Grid顯示的寬度等樣式已經固定了,而且通常情況下都是不再變化,碰到我們今天要說的這種隨數據行總數小於等於或大於Grid可顯示行數時需要擴展或收縮列寬時,是需要有個列寬的原始不變值的,這個MinimumWidth就是用於此,而一般情況下,我們都不會在設計Grid時更改這個MinimumWidth。

故:在Grid初始化後,我們需要先將每列的MinimumWidth記錄下此列的原始列寬,用於Grid記錄數變化時用比較。然後按指定擴展列號以及垂直滾動條寬度改變該列列寬,以適應總記錄數變化與屏顯行數,達到美化界面的目的。

實現步驟及代碼:

1、初始化Grid時,設置各列的MinimumWidth:
InitGridColumnWidth(dataGridView1);

private void InitGridColumnWidth(DataGridView dgv)
{
    foreach (DataGridViewColumn col in dgv.Columns) //設置最小列寬爲原列寬
        col.MinimumWidth = col.Width;
}

2、擴展Grid指定列的代碼:

/// <summary>
/// 當記錄數小於等於可顯示行數時自動擴展Grid指定列寬度
/// </summary>
/// <param name="dgv">指定Grid</param>
/// <param name="nCol">指定列(從1起自然序號)</param>
private void ExtendGridColumnWidth(DataGridView dgv, int nCol = 0)
{
    nCol--;
    if (nCol == -1)
        nCol = dgv.ColumnCount - 1;
    int colWidth = dgv.Columns[nCol].MinimumWidth;        //原列寬
    int nVScrollWidth = SystemInformation.VerticalScrollBarWidth;   //垂直滾動條寬度
    dgv.Columns[nCol].Width = dgv.RowCount <= dgv.DisplayedRowCount(false) ? colWidth + nVScrollWidth : colWidth;
}

3、何時調用擴展代碼段:

每當重新獲取Grid數據後,調用該代碼段即可。

......
GetGridData(sql,plist);
ExtendGridColumnWidth(dataGridView1);    //擴展Grid的最後一列
//ExtendGridColumnWidth(dataGridView1, 1);     //擴展Grid的第1列
......

至此,強迫症適應完畢!呵呵

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章