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列
......
至此,強迫症適應完畢!呵呵