1
我有一個C#WinForms DataGridView默認情況下不(也不能)啓用過濾。結果是,當我顯示DGV時,沒有顯示過濾按鈕。我可以強制過濾器按鈕顯示在我的DataGridViewColumnHeader?
,而不是使用一個DataTable(不是在我的情況選擇),我想總是顯示一個下拉按鈕,就在我的頭對準細胞:
任何人都可以點我在正確的方向?我可以強制一個按鈕被渲染?
在此先感謝
我有一個C#WinForms DataGridView默認情況下不(也不能)啓用過濾。結果是,當我顯示DGV時,沒有顯示過濾按鈕。我可以強制過濾器按鈕顯示在我的DataGridViewColumnHeader?
,而不是使用一個DataTable(不是在我的情況選擇),我想總是顯示一個下拉按鈕,就在我的頭對準細胞:
任何人都可以點我在正確的方向?我可以強制一個按鈕被渲染?
在此先感謝
您可以創建自定義標題單元格從DataGridViewColumnHeaderCell
繼承。然後覆蓋它的Paint
方法並在標題上繪製一個按鈕。
首先調用base.Paint
方法,然後在合適的位置上繪製的按鈕。
要繪製這樣的按鈕,你可以使用ButtonRenderer.DrawButton
和使用圖像的下拉列表。您也可以使用ComboBoxRenderer.DrawDropDownButton
爲您繪製一個下拉菜單。
也顯示它在網格您的自定義標題單元格的實例分配給列的HeaderCell
屬性,你想:
this.dataGridView1.Columns[0].HeaderCell = new FilterDataGridViewColumnHeader();
上面的截圖使用此代碼創建的:
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);
}
}
萬分感謝@Reza。我希望完全避免使用Paint方法,但是使用Google進行搜索時,我意識到這可能是要走的路。感謝:-) – CJe
其實就像一個魅力! :-) – CJe
不客氣:-) –