最近在winfrom客戶端上需要用DataGirdView來展現列表,遇到的一些小問題和解決方案,包括:列寬自適應,動態數據綁定(隨時補充中):
列寬自適應
由於窗體可以自動增大縮小,所以需要設置列寬自適應,類似於控件的dock屬性,採用DataGridView的AutoSizeColumnMode屬性來實現,其可以選的值和解釋如下:
AllCells 調整列寬,以適合該列中的所有單元格的內容,包括標題單元格。
AllCellsExceptHeader 調整列寬,以適合該列中的所有單元格的內容,不包括標題單元格。
ColumnHeader 調整列寬,以適合列標題單元格的內容。
DisplayedCells 調整列寬,以適合當前屏幕上顯示的行的列中的所有單元格的內容,包括標題單元格。
DisplayedCellsExceptHeader 調整列寬,以適合當前屏幕上顯示的行的列中的所有單元格的內容,不包括標題單元格。
- Fill 調整列寬,使所有列的寬度正好填充控件的顯示區域
只需要水平滾動保證列寬在DataGridViewColumn.MinimumWidth 屬性值以上。
相對列寬由相對 DataGridViewColumn.FillWeight 屬性值決定。 None 列寬不會自動調整。
NotSet 列的大小調整行爲從 DataGridView.AutoSizeColumnsMode 屬性繼承。
需要自適應應當設置爲Fill
。
但是隨着而來的一個問題是,該方法得到的列寬是平分了當前窗口大小,我們需要不同列具有不同的寬度並且按照比例縮放.
解決方法是:在設計器編輯列的對話框裏面,找到列的FillWeight屬性,該屬性爲列寬的權重,當設置AutoSizeColumnMode爲Fill的時候,根據不同列之間的FillWeight的值,按照比例進行分配列寬
動態數據綁定
雖然動態綁定很簡單,但是因爲前面提及了列寬的問題,所以希望提前設計好每一列,減少動態綁定時候生成的列還需要進行繁瑣的格式設計的弊端,即查詢結果綁定到已有的列.
採取的方法是:
通過編輯列設定好每一列以及格式,然後設定每一列的DataPropertyName爲sql語句查詢結果(也即綁定到的datatable中的列名稱),則數據綁定後,對應列則能夠正常填充.
代碼如下:
DataTable db = adapter.executeQuery("select rowid,sigid,floatvalue from tran0804");//查詢數據庫結果到datatable中
dataGridView1.DataSource = db; //數據綁定
省去了綁定過程中的設計以及sql查詢也不需要通過as進行重命名