Проблема в имплиментации пользовательского заголовка datagridview
я пытаюсь реализовать пользовательский заголовок datagridview, но он работает неправильно.
это не рисование на сетке
Пожалуйста помочь
Что я уже пробовал:
мой пользовательский класс заголовка
public class ImageTextHeaderCell : DataGridViewColumnHeaderCell { public readonly Label lblText; public readonly PictureBox CntrImage; public event EventHandler ImageClick; public ImageTextHeaderCell() { lblText = new Label(); CntrImage = new PictureBox(); lblText.Font = Control.DefaultFont; //lblText.MouseClick += new MouseEventHandler(MouseClick); CntrImage.MouseClick += new MouseEventHandler(MouseClick); } private void MouseClick(object sender, MouseEventArgs e) { //Debug.WriteLine("x:{0}, y:{1}, button:{2}", e.X, e.Y, e.Button); //OnClick(new DataGridViewCellEventArgs(ColumnIndex, RowIndex)); if (ImageClick != null) { ImageClick(this, EventArgs.Empty); } } public string Text { get { return lblText.Text; } set { lblText.Text = value; } } public Image ControlImage { get { return CntrImage.Image; } set { CntrImage.Image = value; } } protected override void Paint(Graphics graphics, Rectangle clipBounds, 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); lblText.Location = new Point(cellBounds.Left, cellBounds.Top + 3); lblText.Height = cellBounds.Height; lblText.Width = cellBounds.Width - 41; CntrImage.Location = new Point(lblText.Right + 1, cellBounds.Top + 3); lblText.Height = cellBounds.Height; } }
и мой код на форме
DataGridViewTextBoxColumn dataGridViewTextBoxColumn = new DataGridViewTextBoxColumn(); dataGridViewTextBoxColumn.DefaultHeaderCellType = typeof(ImageTextHeaderCell); //dataGridViewTextBoxColumn.HeaderText = "Password"; ImageTextHeaderCell dataGridViewImageColumnHeaderCell = dataGridViewTextBoxColumn.HeaderCell as ImageTextHeaderCell; dataGridViewImageColumnHeaderCell.Text = "hello"; dataGridViewImageColumnHeaderCell.ControlImage = global::WFAppGrid.Properties.Resources.Star; dataGridViewImageColumnHeaderCell.ImageClick += dataGridViewImageColumnHeaderCell_ImageClick; this.dataGridView1.Columns.Add(dataGridViewTextBoxColumn);
RickZeeland
Возможно, использование ImageList может помочь: http://www.viblend.com/forum/d_postsm57_Display-an-image-in-a-Column-Header.aspx#post57