2016-03-02 46 views
1

我有一個C#WinForms DataGridView默認情況下不(也不能)啓用過濾。結果是,當我顯示DGV時,沒有顯示過濾按鈕。我可以強制過濾器按鈕顯示在我的DataGridViewColumnHeader?

,而不是使用一個DataTable(不是在我的情況選擇),我想總是顯示一個下拉按鈕,就在我的頭對準細胞:filtering button

任何人都可以點我在正確的方向?我可以強制一個按鈕被渲染?

在此先感謝

回答

1

您可以創建自定義標題單元格從DataGridViewColumnHeaderCell繼承。然後覆蓋它的Paint方法並在標題上繪製一個按鈕。

首先調用base.Paint方法,然後在合適的位置上繪製的按鈕。

要繪製這樣的按鈕,你可以使用ButtonRenderer.DrawButton和使用圖像的下拉列表。您也可以使用ComboBoxRenderer.DrawDropDownButton爲您繪製一個下拉菜單。

也顯示它在網格您的自定義標題單元格的實例分配給列的HeaderCell屬性,你想:

this.dataGridView1.Columns[0].HeaderCell = new FilterDataGridViewColumnHeader(); 

enter image description here

上面的截圖使用此代碼創建的:

public class FilterDataGridViewColumnHeader : DataGridViewColumnHeaderCell 
{ 
    protected override void Paint(System.Drawing.Graphics graphics, System.Drawing.Rectangle clipBounds, System.Drawing.Rectangle cellBounds, int rowIndex, DataGridViewElementStates dataGridViewElementState, object value, object formattedValue, string errorText, DataGridViewCellStyle cellStyle, DataGridViewAdvancedBorderStyle advancedBorderStyle, DataGridViewPaintParts paintParts) 
    { 
     base.Paint(graphics, clipBounds, cellBounds, rowIndex, dataGridViewElementState, value, formattedValue, errorText, cellStyle, advancedBorderStyle, paintParts); 
     ComboBoxRenderer.DrawDropDownButton(graphics, new System.Drawing.Rectangle(cellBounds.Right - 16, 4, 14, cellBounds.Height - 6), System.Windows.Forms.VisualStyles.ComboBoxState.Normal); 
    } 
} 
+0

萬分感謝@Reza。我希望完全避免使用Paint方法,但是使用Google進行搜索時,我意識到這可能是要走的路。感謝:-) – CJe

+0

其實就像一個魅力! :-) – CJe

+1

不客氣:-) –

相關問題